<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Resizable BAR on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/resizable-bar/</link>
        <description>Recent content in Resizable BAR on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 24 May 2026 00:51:13 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/resizable-bar/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>What is Above 4G Decoding? Why multi-PCIe systems, NAS expansion cards, and large-VRAM GPUs should enable it</title>
        <link>https://knightli.com/en/2026/05/24/above-4g-decoding-pcie-mmio-bar-explained/</link>
        <pubDate>Sun, 24 May 2026 00:51:13 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/24/above-4g-decoding-pcie-mmio-bar-explained/</guid>
        <description>&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; is a low-level PCIe resource allocation option in the motherboard BIOS. It often appears when troubleshooting NAS boxes, mini PCs, workstations, multi-GPU systems, routers, HBA / SATA expansion cards, and local AI machines.&lt;/p&gt;
&lt;p&gt;In simple terms, it allows a 64-bit system to assign PCIe devices&amp;rsquo; MMIO address space above the 4GB physical address range.&lt;/p&gt;
&lt;p&gt;That sounds low-level, but the problem is very real: when a motherboard has a GPU, NVMe drive, NIC, SATA expansion card, capture card, HBA, and other PCIe devices, forcing all of them to compete for address space below 4GB can cause resource allocation failures, missing devices, or even boot freezes.&lt;/p&gt;
&lt;h2 id=&#34;why-is-there-a-4gb-boundary&#34;&gt;Why is there a 4GB boundary?
&lt;/h2&gt;&lt;p&gt;The 4GB boundary is a historical legacy of the 32-bit era.&lt;/p&gt;
&lt;p&gt;A 32-bit address space can address at most:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2^32 bytes = 4GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Modern computers have 64-bit CPUs and operating systems, and memory sizes of 16GB, 32GB, 64GB, or more are common. But during POST and PCIe device initialization, motherboards still need to account for old compatibility assumptions. Many PCIe device resource mappings are initially arranged below the 4GB address boundary.&lt;/p&gt;
&lt;p&gt;The problem is that the space below 4GB is not only for RAM. The system must reserve part of it for hardware devices.&lt;/p&gt;
&lt;p&gt;That is where &lt;code&gt;MMIO&lt;/code&gt; comes in.&lt;/p&gt;
&lt;h2 id=&#34;what-is-mmio&#34;&gt;What is MMIO?
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;MMIO&lt;/code&gt; means Memory-Mapped I/O.&lt;/p&gt;
&lt;p&gt;The CPU cannot directly touch the internal registers or memory windows of PCIe devices as if they were normal RAM. Instead, part of the device&amp;rsquo;s registers, buffers, or VRAM window is mapped into the system address space. When the CPU reads or writes that address range, it is effectively communicating with the PCIe device.&lt;/p&gt;
&lt;p&gt;Roughly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A device needs an address range.&lt;/li&gt;
&lt;li&gt;The motherboard assigns a physical system address range to it.&lt;/li&gt;
&lt;li&gt;When the CPU accesses that address range, it actually accesses the PCIe device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This mapped region is not ordinary RAM. It is an address window occupied by hardware.&lt;/p&gt;
&lt;p&gt;In old default configurations, many devices&amp;rsquo; MMIO regions are constrained below 4GB, often around the 3GB to 4GB area. This usually works with few devices, but becomes crowded as more devices are installed.&lt;/p&gt;
&lt;h2 id=&#34;what-is-bar&#34;&gt;What is BAR?
&lt;/h2&gt;&lt;p&gt;Every PCIe device uses &lt;code&gt;BAR&lt;/code&gt; to tell the motherboard how much address space it needs.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;BAR&lt;/code&gt; means Base Address Register. Its job is to say:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I need a block of MMIO space. Please assign me an address range.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GPUs, NVMe drives, SATA controllers, NICs, HBAs, and USB expansion cards may all need BAR space. More devices means more address windows. GPUs may need especially large mappings.&lt;/p&gt;
&lt;p&gt;If the available MMIO space below 4GB is insufficient, the motherboard may fail to allocate resources to later devices.&lt;/p&gt;
&lt;h2 id=&#34;what-happens-if-above-4g-decoding-is-disabled&#34;&gt;What happens if Above 4G Decoding is disabled?
&lt;/h2&gt;&lt;p&gt;When &lt;code&gt;Above 4G Decoding&lt;/code&gt; is disabled, the motherboard tends to pack PCIe resources below the 4GB boundary. With only a few devices, you may not notice anything. With many devices, problems can appear.&lt;/p&gt;
&lt;p&gt;Common setups include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A discrete GPU.&lt;/li&gt;
&lt;li&gt;One or more NVMe SSDs.&lt;/li&gt;
&lt;li&gt;A JMB585 / ASM1166 SATA expansion card.&lt;/li&gt;
&lt;li&gt;A 2.5G / 10G NIC.&lt;/li&gt;
&lt;li&gt;A Wi-Fi / Bluetooth module.&lt;/li&gt;
&lt;li&gt;Extra HBAs, capture cards, or USB expansion cards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these devices request BAR / MMIO address space from the motherboard. If the below-4GB region is full, the motherboard may show:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A PCIe card is not recognized.&lt;/li&gt;
&lt;li&gt;The device does not appear in BIOS.&lt;/li&gt;
&lt;li&gt;Linux / Windows reports missing devices or resource errors.&lt;/li&gt;
&lt;li&gt;Boot freezes during POST.&lt;/li&gt;
&lt;li&gt;Black screen or blinking cursor.&lt;/li&gt;
&lt;li&gt;Each card works alone, but the system fails when multiple cards are installed together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In JMB585 SATA expansion card scenarios, users often see the motherboard hang before BIOS, or the expansion card disappear after adding NVMe or NIC devices. Besides Option ROM, CSM, and PCIe Gen speed, PCIe address-space allocation is also worth checking.&lt;/p&gt;
&lt;h2 id=&#34;what-changes-when-above-4g-decoding-is-enabled&#34;&gt;What changes when Above 4G Decoding is enabled?
&lt;/h2&gt;&lt;p&gt;Enable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding = Enabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This tells the motherboard that PCIe devices supporting 64-bit addressing may have their MMIO resources allocated above 4GB.&lt;/p&gt;
&lt;p&gt;Then PCIe devices no longer need to fight for the small below-4GB region. The motherboard can place some BAR / MMIO mappings at higher addresses, reducing resource conflicts.&lt;/p&gt;
&lt;p&gt;For modern 64-bit systems, this is usually a reasonable setting, especially on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-disk NAS machines.&lt;/li&gt;
&lt;li&gt;Multi-NIC routers.&lt;/li&gt;
&lt;li&gt;Mini PCs with SATA / HBA expansion cards.&lt;/li&gt;
&lt;li&gt;Multi-GPU workstations.&lt;/li&gt;
&lt;li&gt;AI inference or training machines.&lt;/li&gt;
&lt;li&gt;Desktop systems with GPU, NVMe, capture cards, and expansion cards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Its goal is not to improve normal application performance. Its goal is to make hardware resource allocation less cramped.&lt;/p&gt;
&lt;h2 id=&#34;relationship-with-jmb585--sata-expansion-cards&#34;&gt;Relationship with JMB585 / SATA expansion cards
&lt;/h2&gt;&lt;p&gt;A JMB585-style SATA expansion card may not need huge MMIO space by itself. The problem is often not how much this card needs alone, but how all PCIe devices in the system compete for address space together.&lt;/p&gt;
&lt;p&gt;For example, a mini PC may include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An NVMe system disk.&lt;/li&gt;
&lt;li&gt;An onboard NIC.&lt;/li&gt;
&lt;li&gt;A Wi-Fi module.&lt;/li&gt;
&lt;li&gt;A JMB585 five-port SATA expansion card.&lt;/li&gt;
&lt;li&gt;Possibly a discrete GPU or other controller.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If BIOS resource allocation is conservative, JMB585 may be one of the last devices initialized. Earlier devices have already consumed much of the below-4GB space. When JMB585 asks for BAR space, the motherboard may fail or enter an abnormal state.&lt;/p&gt;
&lt;p&gt;Enabling &lt;code&gt;Above 4G Decoding&lt;/code&gt; lets the motherboard place some device resources above 4GB, reducing the chance of conflict.&lt;/p&gt;
&lt;p&gt;It cannot repair a bad card or solve every PCIe link-training problem, but it is well worth trying when issues appear only after several devices are installed.&lt;/p&gt;
&lt;h2 id=&#34;relationship-with-resizable-bar--sam&#34;&gt;Relationship with Resizable BAR / SAM
&lt;/h2&gt;&lt;p&gt;Many users first notice &lt;code&gt;Above 4G Decoding&lt;/code&gt; when configuring GPU performance features, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Resizable BAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Re-Size BAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReBAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smart Access Memory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SAM&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are related, but not the same thing.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; is the foundation. It allows PCIe device MMIO resources to be assigned above 4GB.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Resizable BAR&lt;/code&gt; is a further capability. Traditionally, even if the CPU can access GPU memory, it often does so through a relatively small window, such as a 256MB mapping. With ReBAR, the CPU can map a larger portion of the GPU&amp;rsquo;s VRAM at once, theoretically reducing access switching overhead.&lt;/p&gt;
&lt;p&gt;Many motherboards require &lt;code&gt;Above 4G Decoding&lt;/code&gt; to be enabled before &lt;code&gt;Resizable BAR&lt;/code&gt; can be enabled. So:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt;: allows device addresses above 4GB.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Resizable BAR&lt;/code&gt; / &lt;code&gt;SAM&lt;/code&gt;: allows the GPU BAR window to become larger.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For NAS and SATA expansion cards, the important part is usually the PCIe address space provided by the first option, not ReBAR itself.&lt;/p&gt;
&lt;h2 id=&#34;side-effects&#34;&gt;Side effects
&lt;/h2&gt;&lt;p&gt;On modern 64-bit Windows, Linux, Ubuntu, Debian, TrueNAS, Proxmox, and similar systems, enabling &lt;code&gt;Above 4G Decoding&lt;/code&gt; usually has no obvious downside.&lt;/p&gt;
&lt;p&gt;Still, keep these points in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Very old 32-bit operating systems may not be suitable.&lt;/li&gt;
&lt;li&gt;Some very old BIOS implementations or legacy PCIe devices may be incompatible.&lt;/li&gt;
&lt;li&gt;If the system cannot boot after changing BIOS settings, clear CMOS or restore defaults.&lt;/li&gt;
&lt;li&gt;If you enable ReBAR / SAM as well, verify that the GPU, motherboard, OS, and driver support it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On modern hardware and 64-bit systems, it is usually a healthy low-level setting to keep enabled, especially when multiple PCIe devices are installed.&lt;/p&gt;
&lt;h2 id=&#34;when-should-you-enable-it&#34;&gt;When should you enable it?
&lt;/h2&gt;&lt;p&gt;Consider enabling &lt;code&gt;Above 4G Decoding&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You use a 64-bit operating system.&lt;/li&gt;
&lt;li&gt;Multiple PCIe devices are installed.&lt;/li&gt;
&lt;li&gt;You have a discrete GPU, especially with 4GB or more VRAM.&lt;/li&gt;
&lt;li&gt;You use JMB585, ASM1166, HBA, RAID, capture, or other expansion cards.&lt;/li&gt;
&lt;li&gt;You are building a multi-disk NAS or router.&lt;/li&gt;
&lt;li&gt;You use multi-GPU, AI accelerator, or local LLM hardware.&lt;/li&gt;
&lt;li&gt;Installing a PCIe card causes boot freeze, black screen, or blinking cursor.&lt;/li&gt;
&lt;li&gt;Each device works alone, but combinations fail.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are troubleshooting a JMB585 SATA expansion card freezing during POST, check it together with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable &lt;code&gt;CSM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Disable unnecessary &lt;code&gt;Storage OpROM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Change PCIe speed from &lt;code&gt;Auto&lt;/code&gt; or &lt;code&gt;Gen3&lt;/code&gt; to &lt;code&gt;Gen2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enable &lt;code&gt;Above 4G Decoding&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Try another PCIe slot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-is-it-called-in-bios&#34;&gt;What is it called in BIOS?
&lt;/h2&gt;&lt;p&gt;Different motherboard vendors use slightly different names. Common names include:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4GB MMIO BIOS assignment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Memory Mapped I/O above 4GB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;64-bit PCIe decoding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PCI 64-bit Resource Handling
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Common menu locations include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Advanced&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCIe Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCI Subsystem Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chipset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;North Bridge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IO Ports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Boot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some motherboards place it near &lt;code&gt;Resizable BAR&lt;/code&gt;, while others hide it under advanced PCIe or chipset settings.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The core purpose of &lt;code&gt;Above 4G Decoding&lt;/code&gt; is to let the motherboard allocate PCIe device MMIO / BAR address space above 4GB. It does not fix drivers; it addresses BIOS / PCIe resource allocation.&lt;/p&gt;
&lt;p&gt;On a simple PC with few devices, it may feel invisible. On a multi-disk NAS, multi-NIC router, mini PC with JMB585 / ASM1166 SATA expansion card, multi-GPU workstation, or local AI box, it matters.&lt;/p&gt;
&lt;p&gt;If installing a PCIe expansion card causes BIOS freezes, black screens, blinking cursor, missing devices, or failure only when multiple devices are installed together, &lt;code&gt;Above 4G Decoding = Enabled&lt;/code&gt; is a BIOS option worth checking early. It is not a cure-all, but it helps modern 64-bit hardware escape the old below-4GB address-space limitation and reduces PCIe resource conflicts.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
