Many types of computer systems include display devices to display images, video streams, and data. Accordingly, these systems typically include functionality for generating and/or manipulating images and video information. In digital imaging, the smallest item of information in an image is called a “picture element” and more generally referred to as a “pixel.”
Some systems include multiple separate displays. In these systems, multiple-display technology enables a single graphics processing unit (GPU) (or other device such as an accelerated processing unit (APU) or other type of system on chip (SOC) or any application-specific integrated circuit (ASIC) with a display controller) to simultaneously support multiple independent display outputs. In one example, a computing system may independently connect multiple high-resolution displays into a large integrated display surface to provide an expanded visual workspace. Gaming, entertainment, medical, audio and video editing, business and other applications may take advantage of the expanded visual workspace and increase multitasking opportunities.
For each supported display, a video subsystem maintains a respective frame buffer that stores data, such as one or more video frames, which may be stored in dynamic random access memory (DRAM). For each supported display, a video controller reads data via a given one of one or more DRAM interfaces for access to a respective frame buffer. A memory clock is typically used to control a data rate for accessing the frame buffer within the DRAM. In some cases, in order to provide a physical connection for transmitting the pixel bitstream from the frame buffer to a display device, a computer is connected directly to the display device through an interface such as DisplayPort (DP), embedded DisplayPort (eDP), high-definition multimedia interface (HDMI), or other type of interface. In one implementation, the bandwidth limitations for the video stream sent from the computer to the display device would be the maximum bit rate of the DisplayPort, eDP, or HDMI cable.
In a scenario where multiple workloads (e.g., game rendering, video processing) are accessing the memory subsystem, the memory subsystem can be clocked at its maximum possible frequency to ensure the memory subsystem can process large numbers of reads and writes. In some cases, when the memory subsystem is not being overly stressed, the system may desire to reduce the memory clock frequency in order to reduce power consumption. Changing the memory clock frequency may require a training session to be performed on the memory interface, a configuration/mode change, or another action that requires access to be stopped temporarily. However, in multi-display systems, each display may have different timing properties associated with driving pixels to the display. This makes it difficult or impossible to find a sufficient duration of time to halt all memory access, without introducing visual artifacts on any of the displays, at times when the memory interface needs to be retrained or when other types of mode changes need to be performed. Therefore, in some systems the memory clock may be forced to remain at a maximum frequency or other predetermined frequency. Consequently, the power consumption for multiple displays may be significant. As power consumption increases for modern integrated circuits (ICs), more costly cooling systems such as larger fans, larger heat sinks and systems to control ambient temperature are utilized to remove excess heat and prevent IC failure. This may also result in louder acoustics and thus an unpleasant customer experience.
The advantages of the methods and mechanisms described herein may be better understood by referring to the following description in conjunction with the accompanying drawings, in which:
In the following description, numerous specific details are set forth to provide a thorough understanding of the methods and mechanisms presented herein. However, one having ordinary skill in the art should recognize that the various implementations may be practiced without these specific details. In some instances, well-known structures, components, signals, computer program instructions, and techniques have not been shown in detail to avoid obscuring the approaches described herein. It will be appreciated that for simplicity and clarity of illustration, elements shown in the figures have not necessarily been drawn to scale. For example, the dimensions of some of the elements may be exaggerated relative to other elements.
Systems, apparatuses, and methods for performing asynchronous memory clock changes on multiple displays are disclosed. In one implementation, a multi-display system drives multiple displays from frame buffer(s) in a memory subsystem. In one implementation, a control unit determines a memory bandwidth demand on the memory subsystem in real-time based on current operating conditions. Next, the control unit compares the real-time memory bandwidth demand or predicted memory bandwidth demand to a bandwidth available with an existing memory clock frequency setting. If the bandwidth available with the existing memory clock frequency setting differs from the real-time memory bandwidth demand or predicted demand, the control unit makes a decision to change the existing memory clock frequency setting to better match the real-time demand. In various implementations, the predicted memory bandwidth demand is generated based on a machine learning model, heuristic, or other technique.
When the control unit decides that a memory clock frequency change is desired for the memory subsystem, the control unit causes a first display to transition into panel self-refresh (PSR) mode. The transition into PSR mode can take some amount of time, such as one or more frames. As used herein, “PSR mode” is defined as when a display device (i.e., panel) uses its own memory to refresh what is visible on the screen instead of relying on an interface to provide a stream of pixels. Simultaneously with putting the first display into PSR mode, the control unit checks a second display to determine when the vertical blanking interval (VBI) shall occur. Once the PSR mode of the first display overlaps with the VBI of the second display, the memory clock frequency change is initiated. Also, many memory devices (e.g., graphics double data rate 6 (GDDR6) synchronous dynamic random-access memory (SDRAM) devices) require memory training when a memory clock frequency is changed. For these memory devices, memory training is performed as part of the memory clock frequency change. After the memory clock frequency change, the first display is transitioned out of PSR mode, which can take some amount of time to occur, and the displays are driven by the frame buffer(s) in the memory subsystem operating at an updated memory clock frequency.
Referring now to
Display controllers 150A-N are representative of any number of display controllers which are included in system 100, with the number varying according to the implementation. Each display controller 150A-N drives a corresponding display 155A-N, with displays 155A-N representative of any number of displays. In some implementations, a single display controller of display controllers 150A-N drives multiple displays.
Display controller 150A includes buffer 152A for storing a frame to be displayed when display 155A is in panel self-refresh (PSR) mode. PSR mode is used when static content is being displayed, allowing display 155A to be driven from buffer 152A rather than being driven from frame buffer 142 of memory device 140. This helps to reduce the power consumption when screen content is not changing. For example, in a desktop computer setting, when a user is viewing a document or other static content, the screen pixels are not changing, and a frame can be stored in buffer 152A to be repeatedly driven to display 155A. In another example, in a mobile device setting, when the mobile device is showing the home screen, the screen contents are not changing, and so display 155A is driven from a frame stored in buffer 152A. Other examples of static screen content can be encountered in various other use cases.
Display controller 150N also includes buffer 152N for the same purpose when display 155N is in PSR mode. However, it is not necessary for all displays 155A-N to support PSR mode. Accordingly, in one implementation, system 100 includes one or more displays which support PSR mode and one or more displays which do not support PSR mode.
In one implementation, control unit 160 determines if condition(s) for performing a power-state change have been detected. Also, in this implementation, control unit 160 monitors the timing of vertical blanking intervals for displays 155A-N. As used herein, the term “vertical blanking interval” is defined as the time elapsing after the final visible line of a first frame is displayed but before the first visible line of a second frame is displayed, where the second frame is immediately subsequent to the first frame in the video sequence. Within a frame, there are active lines (i.e., scan lines) and vertical blanking lines. The number of active lines determines the active frame time and the number of vertical blanking lines determines the duration of the vertical blanking interval. In some cases, a vertical synchronization (or Vsync) pulse is generated at the start of the vertical blanking interval. In these cases, the vertical synchronization pulse serves as a marker of the occurrence of the vertical blanking interval.
When conditions for performing a power-state change are detected, control unit 160 determines when to implement the power-state change so that it coincides with a first display being in PSR mode simultaneously with a second display undergoing a vertical blanking interval. In one implementation, the power-state change involves adjusting the memory clock frequency of one or more memory devices 140. Control unit 160 can be implemented using any suitable combination of circuitry, memory elements, and program instructions. It is noted that control unit 160 can also be referred to by other names, such as a system management controller, system management unit, system controller, controller, and so on. While a single control unit 160 is shown in
Processors 105A-N are representative of any number of processors which are included in system 100. In one implementation, processor 105A is a general purpose processor, such as a central processing unit (CPU). In this implementation, processor 105A executes a driver 110 (e.g., graphics driver) for communicating with and/or controlling the operation of one or more of the other processors in system 100. It is noted that depending on the implementation, driver 110 can be implemented using any suitable combination of hardware, software, and/or firmware.
In one implementation, processor 105N is a data parallel processor with a highly parallel architecture. Data parallel processors include graphics processing units (GPUs), digital signal processors (DSPs), field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), and so forth. In some implementations, processors 105A-N include multiple data parallel processors. In one implementation, processor 105N is a GPU which renders pixel data into frame buffer 142 representing an image. This pixel data is then provided to display controllers 150A-N to be driven to displays 155A-N, respectively. In other implementations, pixel data is rendered into multiple frame buffers, with each frame buffer used to drive a separate display 155A-N.
Memory controller(s) 130 are representative of any number and type of memory controllers accessible by processors 105A-N. While memory controller(s) 130 are shown as being separate from processors 105A-N, it should be understood that this merely represents one possible implementation. In other implementations, a memory controller 130 can be embedded within one or more of processors 105A-N and/or a memory controller 130 can be located on the same semiconductor die as one or more of processors 105A-N. Memory controller(s) 130 are coupled to any number and type of memory devices(s) 140. Memory device(s) 140 are representative of any number and type of memory devices. For example, the type of memory in memory device(s) 140 includes Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), Graphics Double Data Rate 6 (GDDR6) Synchronous DRAM (SDRAM), NAND Flash memory, NOR flash memory, Ferroelectric Random Access Memory (FeRAM), or others.
I/O interfaces 120 are representative of any number and type of I/O interfaces (e.g., peripheral component interconnect (PCI) bus, PCI-Extended (PCI-X), PCIE (PCI Express) bus, gigabit Ethernet (GBE) bus, universal serial bus (USB)). Various types of peripheral devices (not shown) are coupled to I/O interfaces 120. Such peripheral devices include (but are not limited to) displays, keyboards, mice, printers, scanners, joysticks or other types of game controllers, media recording devices, external storage devices, network interface cards, and so forth. Network interface 135 is able to receive and send network messages across a network.
In various implementations, computing system 100 is a computer, laptop, mobile device, game console, server, streaming device, wearable device, or any of various other types of computing systems or devices. It is noted that the number of components of computing system 100 varies from implementation to implementation. For example, in other implementations, there are more or fewer of each component than the number shown in
Turning now to
Processing elements 205 are representative of any number, type, and arrangement of processing resources (e.g., CPU, GPU, FPGA, ASIC). Control unit 210 includes any suitable combination of execution units, circuitry, memory, and program instructions. While control unit 210 is shown as a separate component from processing elements 205, this is representative of one particular implementation. In another implementation, the functionality of control unit 210 is performed, at least in part, by processing elements 205. Fabric 215 is representative of any number and type of buses, communication devices/interfaces, interconnects, and other interface modules for connecting the various components of system 200 together.
In one implementation, processing elements 205 generate pixel data for display on display devices 250 and 270. This pixel data is written to frame buffer 230 in memory 220 by processing elements 205 and then driven to display devices 250 and 270 from frame buffer 230 in one implementation. The pixel data stored in frame buffer 230 represents frames of a video sequence in one implementation. In another implementation, the pixel data stored in frame buffer 230 represents the screen content of a laptop or desktop personal computer (PC). In a further implementation, the pixel data stored in frame buffer 230 represents the screen content of a mobile device (e.g., smartphone, tablet).
Memory subsystem 220 includes any number and type of memory controllers and memory devices. In one implementation, memory subsystem 200 is capable of operating at various different clock frequencies which can be adjusted according to various operating conditions. However when a memory clock frequency change is implemented, memory training is typically performed to modify various parameters, adjust the characteristics of the signals generated for the transfer of data, and so on. For example, the phase, the delay, and/or the voltage level of various memory interface signals are tested and adjusted during memory training. Various signal transmissions may be conducted between a memory controller and memory in order to train these memory interface signals. Finding an appropriate time to perform this memory training when modifying a memory clock frequency can be challenging.
In one implementation, control unit 210 causes a memory clock frequency update to be performed when display device 250 is in PSR mode and when display device 270 has a vertical blanking interval. This allows the memory training to be performed without disrupting the driving of display data to display devices 250 and 270. During PSR mode, the pixel data is stored in buffer 245 of timing controller 240 and driven to display device 250 without involving memory subsystem 220. In other words, when operating in PSR mode, display device 250 performs a self-refresh using the pixel data stored in buffer 245. Also, when a vertical blanking interval (VBI) occurs for display device 270, no data is being transferred from frame buffer 230 to display device 270. This provides a window of opportunity for initiating a memory clock frequency change for memory subsystem 220.
In one implementation, control unit 210 includes memory bandwidth monitor 212, tracking unit 213, and frequency adjustment unit 214. Memory bandwidth monitor 212, tracking unit 213, and frequency adjustment unit 214 can be implemented using any combination of circuitry, execution units, and program instructions. Also, in another implementation, memory bandwidth monitor 212, tracking unit 213, and frequency adjustment unit 214 are individual units that are separate from control unit 210 rather than being part of control unit 210. In other implementations, control unit 210 can include other arrangements of components that perform similar functionality as memory bandwidth monitor 212, tracking unit 213, and frequency adjustment unit 214.
In one implementation, memory bandwidth monitor 212 compares real-time memory bandwidth demand of memory subsystem 220 to the memory bandwidth available with the existing memory clocks. If the memory bandwidth available with existing memory clocks differs from the real-time memory bandwidth demand by more than a threshold, then control unit 210 makes a decision to change the frequencies of one or more clocks of memory subsystem 220. When the decision to change the frequencies of one or more clocks of memory subsystem 220, tracking unit 213 causes display device 250 to go into PSR mode by sending a corresponding command to timing controller 240. It may take display device 250 several frames to get into PSR mode. The number of frames that it takes for display device 250 can vary according to the implementation. Tracking unit 213 also tracks the timing of VBIs for display device 270.
In one implementation, in order to expedite the transition from non-PSR mode to PSR mode, tracking unit 213 sends a signal to timing controller 240 over sideband interface 247 for timing controller 240 to scan out the previously stored frame. It is noted that sideband interface 247 is separate from the main interface 242 used for passing pixels to timing controller 240. In one implementation, the main interface 242 is an eDP interface. In other implementations, the main interface 242 is compatible with any of various other protocols. Sending the signal over sideband interface 247 allows the timing and scheduling of invoking a scan-out of the previously stored frame to occur in a relatively short period of time (i.e., a line time) before the VBI interval of display device 270. This is in contrast to the traditional method of sending a request over the main interface 242 which can result in a lag of several frames before timing controller 240 enters PSR mode.
Once timing controller 240 is in PSR mode, frequency adjustment unit 214 generates a command to program PLL 225 to generate the memory clock at a different frequency at a time when tracking unit 213 determines that there will be a VBI for display device 270. In other implementations, control unit 210 includes other arrangements of logic and/or units to cause an adjustment to be made to the memory clock frequency during the overlap of PSR mode and VBIs for display devices 250 and 270, respectively. For example, in another implementation, tracking unit 213 and frequency adjustment unit 214 are combined together into a single unit. In a further implementation, frequency adjustment unit 214 is split into multiple units, with a first unit generating a command to change the frequency generated by PLL 225 and a second unit sending the command to PLL 225. Other arrangements of circuitry, processing elements, execution units, interface units, program instructions, and other components for implementing the functionality of control unit 210 are possible and are contemplated.
The functionality of timing controllers (or TCONs) varies from TCON to TCON. Some TCONs only keep a fraction of the current picture. For these TCONs, for PSR to be functional, the TCON needs to enter a mode (i.e., “enable PSR”) where the picture is copied to the TCON's memory each time a picture is scanned in. Then, when PSR is entered, the last historical picture is read out of the memory. Some TCONs, or specific modes of a TCON, always have the previous picture available. Going into PSR mode in this case does not require the enable PSR mode. Accordingly, entering PSR mode can involve two steps or one step depending on the capabilities or functionality of the TCON.
System 200 can be any of various types of computing systems. For example, in one implementation, system 200 includes a laptop connected to an external display. In this implementation, display device 250 is the internal display of the laptop while display device 270 is the external display. In another implementation, system 200 includes a mobile device connected to an external display. In this implementation, display device 250 is the internal display of the mobile device while display device 270 is the external display. Other scenarios employing the components of system 200 to implement the techniques described herein are possible and are contemplated.
In some implementations, a system can have three or more displays. For example, in one implementation, a system has multiple internal displays that are PSR capable. In this implementation, the second internal display can include similar logic to the first internal display and when one display is placed into PSR, the other would be placed into PSR as well. In another implementation, the system includes multiple external displays that are PSR capable. The system would query the external displays and determine their capabilities and how to trigger the PSR or “self-refresh” mode if applicable.
In one implementation, only a single non-“self-refresh capable display can be supported, as long as the other displays are “self-refresh capable”, with the following exception: multiple non-self-refresh capable displays can be treated as a single display, if their vertical blanking intervals can be synchronized to occasionally be coincident. For example, two 60 Hz displays could be synchronized to have coincident clocks by “pulling” the timing (slightly) of one display, bit by bit, until it matches the other. Once synchronized, very small adjustments could occasionally be used to keep them in sync. This is a standard technique often known as “clock-pulling” or “genlocking”. In another example, a 60 Hz and a 30 Hz display could have every second VBI (in terms of the 30 Hz display) in sync with similar technique. VBI intervals could differ between the displays, so the shorter and coincident interval would be applicable for training/clock change.
Referring now to
Waveform 304 represents the vertical blanking (or VBLANK) interval timing for the external display. Each pulse shown in waveform 304 indicates when the vertical blanking interval is occurring. Waveform 306 shows the timing of the vertical blanking interval of the internal display. Waveform 308 represents when the internal display goes into panel self-refresh (PSR) mode. Waveform 310 represents when a power state (or PState) change takes place. Waveform 312 represents when a change to the memory clock takes place.
At the point in time denoted by dashed line 314, a vertical blanking interval occurs for the internal display. At the point in time represented by dashed line 316, the internal display goes into PSR mode. Then, at the point in time represented by dashed line 318, the external display is connected to the system. When the external display is connected to the system, the PSR mode is disabled (if it was already enabled) and the memory clock frequency is changed to its highest (or pre-determined) possible frequency since future memory clock frequency changes will be difficult to implement. In this example, the overlap of the vertical blanking intervals for the primary and external displays is a rare or infrequent occurrence and cannot be relied upon as a dependable way to change the memory clock frequency. However, keeping the memory clock at its maximum frequency results is inefficient in terms of power consumption. Accordingly, improved methods for making a memory clock frequency change are desired.
Turning now to
At the point in time represented by dashed line 414, the vertical blanking interval for the internal display occurs. At the point in time represented by dashed line 416, the internal display goes into PSR mode. At the point in time represented by dashed line 418, a power-state change is implemented when the external display is connected to the system, bringing the memory clock frequency to its maximum value. This is similar to what occurred in the approach shown in
At some point between in the interval between the point in time represented by dashed line 418 and a later point in time represented by dashed line 420, a decision is made to change the memory clock frequency. Once the decision to change the memory clock frequency is made, a signal is sent to the internal display for the internal display to transition into PSR mode (if the internal display is not already in PSR mode). This transition can take some amount of time to take place, in some cases multiple frames will elapse before the internal display enters PSR mode. Once the internal display enters PSR mode at dashed line 420, this allows a power-state change to occur at the point in time represented by dashed line 422 which coincides with when the external display has its vertical blanking interval. The power-state change is performed to reduce the memory clock frequency which results in a reduction of power consumption. The memory clock frequency could be at a low state or at a state somewhere in the middle between the highest frequency and the lowest frequency. After the power-state change is performed, the internal display could return to its previous PSR mode of on or off depending on what the internal display was in prior to the decision being made to change the memory clock frequency.
This technique of using the PSR mode to perform power-state changes makes it easier to choose times for performing power-state changes as compared to the prior technique of waiting for an overlap of vertical blanking intervals on both the internal and external displays. The choice to be in PSR mode for power savings, when the display is not being updated, is an independent decision—if PSR is used to facilitate memory/clock/mode changes, then once this action is complete, the PSR state should be restored.
Referring now to
A control unit determines that one or more conditions are satisfied for causing a change to a memory clock frequency for a memory subsystem driving multiple displays (block 505). In one implementation, the change to the memory clock frequency for the memory subsystem is performed as part of a power-state change. The one or more conditions that trigger the change to the memory clock frequency can vary from implementation to implementation. Method 800 describes one example of a condition for triggering a change to the memory clock frequency. Other conditions can cause a memory clock frequency change in other implementations. For example, in one implementation, connecting or disconnecting alternating current (AC) power or direct current (DC) power can cause a memory clock frequency change. There may be different allowable clock ranges depending on the power source. In another implementation, a change in the temperature of the host system or apparatus can trigger a desired to change the memory clock frequency. For example, if the temperature of the host system/apparatus exceeds a first threshold, then the control unit will attempt to reduce power consumption in order to lower the temperature. One of the ways for reducing the power consumption is by decreasing the memory clock frequency. In a further implementation, if the temperature falls below a second threshold, the control unit can increase the memory clock frequency since doing so will not cause the system/apparatus to overheat. In a still further implementation, if a performance increase is deemed to be desirable, then the control unit will attempt to increase performance by increasing the memory clock frequency. Other conditions for changing the memory clock frequency are possible and are contemplated.
In some implementations, the condition for triggering a change to the memory clock frequency can be event driven. The memory controller could post events when throughput used goes over/under some thresholds, instantaneously, over a window, or filtered temporally in some way. There can also be a software, firmware, or hardware-based mechanism that when a workload is submitted, the mechanism knows or predicts that the workload needs resources even before the workload is scheduled or executed. Similarly, when the workload finishes, the mechanism knows what resources are no longer needed. Also, a similar mechanism can account for periodic workloads. In another implementation, a real-time operating system (RTOS) may be aware of deadlines, and the RTOS can pick more optimal clocks depending on an approaching deadline.
Next, in response to detecting the condition(s) for causing a change to the memory clock frequency, the control unit tracks when a first display device has a vertical blanking interval (VBI) (block 510). Also, in response to detecting the condition(s) for causing a change to the memory clock frequency, the control unit causes a second display device to enter PSR mode (block 515). In some cases, entering PSR mode can involve two steps where PSR mode is enabled in a first step and then PSR mode is entered in a second step. This can depend, in at least one implementation, on the capabilities of the particular TCON of the second display device. If the second display device is already in PSR mode, then block 515 can be skipped. After the second display device enters PSR mode, if the first display device has a vertical blanking interval (conditional block 520, “yes” leg), then the control unit initiates a memory clock frequency update during the vertical blanking interval (block 525). In one implementation, as part of the memory clock frequency update, memory training is performed. After the memory clock frequency update is performed, the control unit causes the second display device to exit PSR mode (block 530). It is noted that the second display device can stay in PSR mode if other condition(s) for staying in PSR mode are detected. After block 530, method 500 ends. If the second display device is not in a vertical blanking interval (conditional block 520, “no” leg), then method 500 stays at conditional block 520. It is noted that method 500 can be repeated each time conditions(s) for changing the memory clock frequency are detected.
In various implementations, the first and second display devices described in method 500 have different refresh rates. For example, in one implementation, the first display device has a first refresh rate (e.g., 60 frames per second (fps)) and the second display device has a second refresh rate (e.g., 24 fps). It is assumed for the purposes of this discussion that the second refresh rate is different from the first refresh rate. In this implementation, the VBI's of the display devices will be occurring at different rates, and waiting for the VBI's to align is not a reliable strategy for allowing the memory clock frequency update to occur. This makes method 500 a useful technique for still allowing memory clock frequency updates to occur even when the display devices have different frame refresh rates.
Turning now to
Then, at a later point in time, the timing controller receives a signal or command from a host (e.g., processor) to preemptively switch to a second mode (block 615). The signal or command can be communicated on the first interface or using a sideband signal, depending on the implementation. In one implementation, the second mode is a pre-PSR mode which allows for a relatively fast transition into PSR mode. For example, in this implementation, while it may take 4 or 5 cycles to switch from the first mode into PSR mode, it may only take 1 or 2 cycles to switch from pre-PSR mode into PSR mode.
Next, the timing controller receives a signal or command from the host to switch to a third mode (block 620). In one implementation, the third mode is PSR mode. In one scenario, the signal or command specifies a number of frames during which the timing controller is to operate in the third mode. While operating in the third mode, the timing controller receives, from a second interface coupled to an embedded frame buffer, pixels to drive to the display (block 625). In one implementation, the timing controller drives pixels to the display from the embedded frame buffer for a specified number of frames. In another implementation, the timing controller drives pixels to the display from the embedded frame buffer until receiving a signal or command from the host to exit the third mode. In either case, the timing controller returns to the second or first mode at a later point in time (block 630). Whether the timing controller returns to the second or first mode from the third mode can depend on a variety of factors, including a specific command from the host, a programmable setting, the status of one or more operating conditions, or otherwise. After block 630, method 600 ends.
Referring now to
In response to detecting the condition(s) for updating the memory clock frequency of the memory subsystem, the control unit tracks when the first display device has a VBI (block 715). Also in response to detecting the condition(s) for updating the memory clock frequency of the memory subsystem, the control unit causes the second display device to go into partial PSR mode (block 720). Partial PSR mode refers to a mode when only a portion of the screen will be redrawn while the remaining portions will be refreshed (i.e., repeated) from a previous frame. For example, when a user moves a mouse to a new part of the screen, but the other screen contents remain the same, partial PSR mode can be implemented to reuse most of the previous frame while only updating the portions of the frame affected by movement of the mouse. Partial PSR mode can also be used in other scenarios where only a portion of the screen is being updated. It is noted that partial PSR mode is also sometimes referred to as “Selective Update PSR”.
Next, the control unit tracks the timing of the different phases of the partial PSR mode (block 725). Then, the control unit schedules the update to the memory clock frequency of the memory subsystem to occur when the VBI of the first display device overlaps (i.e., aligns) with the refresh portion of the partial PSR mode of the second display device (block 730). After block 730, method 700 ends.
Turning now to
If the memory bandwidth (BW) available with the existing frequencies of the memory clocks is different from the real-time memory bandwidth demand by more than a threshold (conditional block 810, “yes” leg), then a control unit (e.g., control unit 210) makes a decision to change the frequency of one or more memory clocks (block 815). In one implementation, each memory clock has separate control parameters (e.g., a separate threshold). In various implementations, the threshold can include components of temporal filter, hysteresis, and so on. In one implementation, if the available memory bandwidth is more than the demand there can be a condition, heuristic or mathematical, that can delay changing the frequency. If the available memory bandwidth is less than the demand, then the control unit may want to increase the frequency as quickly as possible. Accordingly, the condition in conditional block 810 can be programmable and include time, filtering, and so on.
Next, a tracking unit (e.g., tracking unit 213) and a frequency adjustment unit (e.g., frequency adjustment unit 214) causes the memory clock frequency change(s) to occur on the overlap of a VBI on a first display device and PSR mode on a second display device (block 820). After a programmable delay (block 825), method 800 returns to block 805. The programmable delay in block 825 prevents memory clock frequency change hysteresis. Otherwise, if the memory bandwidth available with the existing frequencies of the memory clocks is within a threshold of the real-time memory bandwidth demand (conditional block 810, “no” leg), then method 800 returns to block 805.
In various implementations, program instructions of a software application are used to implement the methods and/or mechanisms described herein. For example, program instructions executable by a general or special purpose processor are contemplated. In various implementations, such program instructions are represented by a high level programming language. In other implementations, the program instructions are compiled from a high level programming language to a binary, intermediate, or other form. Alternatively, program instructions are written that describe the behavior or design of hardware. Such program instructions are represented by a high-level programming language, such as C. Alternatively, a hardware design language (HDL) such as Verilog is used. In various implementations, the program instructions are stored on any of a variety of non-transitory computer readable storage mediums. The storage medium is accessible by a computing system during use to provide the program instructions to the computing system for program execution. Generally speaking, such a computing system includes at least one or more memories and one or more processors configured to execute program instructions.
It should be emphasized that the above-described implementations are only non-limiting examples of implementations. Numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.
Number | Name | Date | Kind |
---|---|---|---|
5335010 | Lindemeier et al. | Aug 1994 | A |
5818543 | Lee | Oct 1998 | A |
5860056 | Pond | Jan 1999 | A |
6414960 | Kuhn et al. | Jul 2002 | B1 |
7479981 | Tierney et al. | Jan 2009 | B2 |
7596359 | Kimoto et al. | Sep 2009 | B2 |
7715634 | Lei et al. | May 2010 | B2 |
7881258 | Gilbert et al. | Feb 2011 | B2 |
8300563 | Krishnaswamy et al. | Oct 2012 | B2 |
8365238 | Reznic et al. | Jan 2013 | B2 |
8422961 | Katie | Apr 2013 | B2 |
8457026 | Ho et al. | Jun 2013 | B1 |
8976220 | Maxwell | Mar 2015 | B2 |
9450620 | Ahmed et al. | Sep 2016 | B1 |
9716537 | Mammoser et al. | Jul 2017 | B2 |
9786985 | Kim et al. | Oct 2017 | B2 |
9799954 | Preradovic et al. | Oct 2017 | B2 |
9948413 | Zhou et al. | Apr 2018 | B1 |
10312980 | Maamari et al. | Jun 2019 | B2 |
10523295 | Kasher et al. | Dec 2019 | B2 |
10582458 | Sadek et al. | Mar 2020 | B2 |
10680927 | Vu | Jun 2020 | B2 |
10871559 | Vu et al. | Dec 2020 | B2 |
10959111 | Stark, Jr. et al. | Mar 2021 | B2 |
11140368 | Vu et al. | Oct 2021 | B2 |
20020196366 | Cahill, III | Dec 2002 | A1 |
20030072376 | Krishnamachari et al. | Apr 2003 | A1 |
20040075621 | Shiuan | Apr 2004 | A1 |
20040081238 | Parhy | Apr 2004 | A1 |
20040196919 | Mehta et al. | Oct 2004 | A1 |
20040204103 | Rouphael | Oct 2004 | A1 |
20050185097 | Takatori et al. | Aug 2005 | A1 |
20060017843 | Shi et al. | Jan 2006 | A1 |
20060026450 | Bounitch | Feb 2006 | A1 |
20060209890 | MacMullan et al. | Sep 2006 | A1 |
20060209892 | MacMullan et al. | Sep 2006 | A1 |
20060212911 | MacMullan et al. | Sep 2006 | A1 |
20060262985 | Chen et al. | Nov 2006 | A1 |
20070147492 | Marquant et al. | Jun 2007 | A1 |
20070223380 | Gilbert et al. | Sep 2007 | A1 |
20080030509 | Conroy et al. | Feb 2008 | A1 |
20080064425 | Kim et al. | Mar 2008 | A1 |
20080088635 | Callway et al. | Apr 2008 | A1 |
20080144713 | Kimmich et al. | Jun 2008 | A1 |
20090150943 | Vasudevan et al. | Jun 2009 | A1 |
20090213940 | Steinbach et al. | Aug 2009 | A1 |
20100009635 | Qin et al. | Jan 2010 | A1 |
20100150252 | Camp, Jr. et al. | Jun 2010 | A1 |
20100214169 | Katie | Aug 2010 | A1 |
20110058104 | Arai | Mar 2011 | A1 |
20110070928 | Hsu et al. | Mar 2011 | A1 |
20110129025 | Jaeckel et al. | Jun 2011 | A1 |
20110151790 | Khandekar et al. | Jun 2011 | A1 |
20110286545 | Guignard et al. | Nov 2011 | A1 |
20120276896 | Ren et al. | Nov 2012 | A1 |
20120327115 | Chhetri et al. | Dec 2012 | A1 |
20130115887 | Kwon et al. | May 2013 | A1 |
20130194950 | Haghighat et al. | Aug 2013 | A1 |
20130242117 | Luo et al. | Sep 2013 | A1 |
20140010319 | Baik et al. | Jan 2014 | A1 |
20140126620 | Maltsev et al. | May 2014 | A1 |
20140184625 | Shah | Jul 2014 | A1 |
20140266900 | Kasher | Sep 2014 | A1 |
20140269937 | Wadsworth et al. | Sep 2014 | A1 |
20140368667 | Peterson et al. | Dec 2014 | A1 |
20150110167 | Chen et al. | Apr 2015 | A1 |
20150289147 | Lou et al. | Oct 2015 | A1 |
20150333994 | Gell et al. | Nov 2015 | A1 |
20150341646 | Sze et al. | Nov 2015 | A1 |
20160105229 | Trainin et al. | Apr 2016 | A1 |
20160134485 | Thapliya et al. | May 2016 | A1 |
20160149633 | Sanderovich et al. | May 2016 | A1 |
20160227229 | Wadsworth | Aug 2016 | A1 |
20160227432 | Freeman et al. | Aug 2016 | A1 |
20160267881 | Tann et al. | Sep 2016 | A1 |
20160301770 | Marra et al. | Oct 2016 | A1 |
20160337150 | Larsson et al. | Nov 2016 | A1 |
20170026263 | Gell et al. | Jan 2017 | A1 |
20170127408 | Du | May 2017 | A1 |
20170134076 | Maamari et al. | May 2017 | A1 |
20170141885 | Bontu et al. | May 2017 | A1 |
20170156067 | Huang | Jun 2017 | A1 |
20170187437 | Cariou et al. | Jun 2017 | A1 |
20170207839 | Eitan et al. | Jul 2017 | A1 |
20170222704 | Eitan et al. | Aug 2017 | A1 |
20170251484 | Negus et al. | Aug 2017 | A1 |
20170264350 | Sanderovich et al. | Sep 2017 | A1 |
20180027420 | Takahashi et al. | Jan 2018 | A1 |
20180062719 | Verma et al. | Mar 2018 | A1 |
20180074188 | Polo et al. | Mar 2018 | A1 |
20180093177 | Tokubo | Apr 2018 | A1 |
20180123901 | Yermakov et al. | May 2018 | A1 |
20180137412 | Nikkhah et al. | May 2018 | A1 |
20180198506 | Sanderovich et al. | Jul 2018 | A1 |
20180199256 | Sanderovich et al. | Jul 2018 | A1 |
20180205423 | Sanderovich et al. | Jul 2018 | A1 |
20180227027 | Trainin et al. | Aug 2018 | A1 |
20180234860 | Kasher et al. | Aug 2018 | A1 |
20180248603 | Kasher et al. | Aug 2018 | A1 |
20180288635 | Kaushik et al. | Oct 2018 | A1 |
20190036572 | Kasher et al. | Jan 2019 | A1 |
20190068473 | Vu | Feb 2019 | A1 |
20190101638 | Vu et al. | Apr 2019 | A1 |
20190104276 | Vu et al. | Apr 2019 | A1 |
20190104458 | Svennebring et al. | Apr 2019 | A1 |
20190158156 | Da Silva et al. | May 2019 | A1 |
20190173544 | Vu et al. | Jun 2019 | A1 |
20190199467 | Vu | Jun 2019 | A1 |
20190215256 | Dhanabalan et al. | Jul 2019 | A1 |
20190230185 | Dhanabalan et al. | Jul 2019 | A1 |
20190261209 | Balasubramanian et al. | Aug 2019 | A1 |
20190364449 | Yang et al. | Nov 2019 | A1 |
20200280862 | Stark, Jr. et al. | Sep 2020 | A1 |
Number | Date | Country |
---|---|---|
2009156366 | Dec 2009 | WO |
2011087905 | Jul 2011 | WO |
Entry |
---|
Non-Final Office Action in U.S. Appl. No. 15/686,934, dated Jan. 25, 2019, 8 pages. |
Non-Final Office Action in U.S. Appl. No. 15/832,448, dated Feb. 1, 2019, 15 pages. |
International Search Report and Written Opinion in International Application No. PCT/US2018/052350, dated Dec. 14, 2018, 13 pages. |
Van Der Schaar et al., “Robust Transmission of MPEG-4 Scalable Video Over 4G Wireless Networks”, International Conference on Image Processing, Sep. 22, 2002, pp. 757-760, vol. 3, IEEE. |
International Search Report and Written Opinion in International Application No. PCT/US2018/052373, dated Jan. 7, 2019, 13 pages. |
Vu, Ngoc Vinh, U.S. Appl. No. 15/852,833, entitled “Video Codec Data Recovery Techniques for Lossy Wireless Links”, filed Dec. 22, 2017, 36 pages. |
Non-Final Office Action in U.S. Appl. No. 15/721,125, dated Feb. 20, 2019, 9 pages. |
Non-Final Office Action in U.S. Appl. No. 15/852,833, dated May 31, 2019, 11 pages. |
Final Office Action in U.S. Appl. No. 15/721,125, dated Sep. 10, 2019, 9 pages. |
Final Office Action in U.S. Appl. No. 15/832,448, dated Sep. 30, 2019, 18 pages. |
Final Office Action in U.S. Appl. No. 15/852,833, dated Oct. 3, 2019, 12 pages. |
Final Office Action in U.S. Appl. No. 15/686,934, dated Oct. 16, 2019, 9 pages. |
Non-Final Office Action in U.S. Appl. No. 15/721,125, dated Jan. 7, 2020, 10 pages. |
Non-Final Office Action in U.S. Appl. No. 15/832,448, dated Apr. 15, 2020, 18 pages. |
Non-Final Office Action in U.S. Appl. No. 15/852,833, dated Apr. 17, 2020, 12 pages. |
Final Office Action in U.S. Appl. No. 15/832,448, dated Oct. 28, 2020, 19 pages. |
Non-Final Office Action in U.S. Appl. No. 15/721,125, dated Mar. 11, 2021, 11 pages. |
International Search Report and Written Opinion in International Application No. PCT/IB2021/061867, dated April 25, 2022, 9 pages. |
Number | Date | Country | |
---|---|---|---|
20220199047 A1 | Jun 2022 | US |