Jump to content

OpenCore 0.6.3: new memory properties section


13 posts in this topic

Recommended Posts

In Opencore (OC) 0.6.3, still in beta phase, a change has been made to SampleCustom.plist file, a new Memory section has been added within PlatformInfo, it describes a series of RAM memory parameters such as as defined in the SMBIOS specification.

Note: article useful only for those cases where memory has errors in SMBIOS and it is convenient to define its parameters manually. Most users start from Sample.plist file (instead of SampleCustom.plist file) and Memory section is absent from it, this article is not necessary for them. The difference is the new CustomMemory key which, if set to true, requires filling the Memory section but, if set to false, allows that section to be completely omitted.

Changes in OC 0.6.3 config.plist


OC 0.6.3 presents significant changes in its operating characteristics, several of them aimed at improving its integration with Big Sur. It also presents changes in the structure of SampleCustom.plist. All of these changes are inside PlatformInfo.
 

  • Removed SMBIOS key - MemoryFormFactor
  • Added a new key called CustomMemory
  • Added a new key called PlatformNVRAM with 5 subkeys: BID, FirmwareFeatures, FirmwareMask, MLB and ROM, some of these keys are still present in the SMBIOS section
  • Added a new key called Memory with several subkeys related to RAM:
     
  • DataWidth: bandwidth in bits of the bus, usually has the value of 64
  • ErrorConnection: primary method of error detection or correction (none, parity, ECC ...)
  • FormFactor: type of used module (DIMM, SODIMM ...)
  • MaxCapacity: maximum memory capacity, in bytes, supported by the motherboard
  • TotalWidth: total value of bus width, in bits, including error correction channels if any; if they do not exist, TotalWidth value is identical to DataWidth
  • Type: memory type (DDR3, DDR4 ...)
  • DetailType: additional information about memory (Synchronous, Buffered, Unbuffered ...)
  • Devices: this section describes the memory banks, occupied or not, and specifies characteristics of each one:
     
  • AssetTag: memory module property tag
  • BankLocator: name of the memory bank in which the module is housed
  • DeviceLocator: description of the bank position on the motherboard
  • Manufacturer: memory manufacturer
  • PartNumber: code corresponding to the memory model
  • SerialNumber: serial number of each module
  • Size: size in MB, 0 indicates it is empty
  • Speed: maximum memory speed in MT / s (megatransfers per second).
     

How to know characteristics of RAM?

In Linux world there has long been a tool called dmidecode that provides information about hardware as described in the BIOS according to SMBIOS / DMI standard. Acidanthera has a specific version for macOS, the current version is 3.2c (dmidecode-mac-3.2c.zip). It is downloaded as an executable dmidecode file that should be copied to the / usr / local / bin folder so that it is accessible in the PATH variable. With this tool we obtain information about the SMBIOS parameters of the computer through the I / O Registry. In this case, we are interested in the memory section, specifically regarding the 4 memory slots. For this we use dmidecode with -t memory modifier. This code, for example, is from my PC (only the data of the first memory bank is shown):

> dmidecode -t memory
# dmidecode 3.2c
Scanning I/O Registry for entry point.
SMBIOS 3.2 present.

Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 0 kB
    Error Information Handle: No Error
    Number Of Devices: 4

Memory Device
    Array Handle: 0x009D
    Error Information Handle: No Error
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Locator: ChannelA-DIMM0
    Bank Locator: BANK 0
    Type: DDR4
    Type Detail: Synchronous
    Speed: 3200 MT/s
    Manufacturer: Corsair
    Serial Number: 200400138487908
    Asset Tag: 9876543210
    Part Number: CMK16GX4M2B3200C16
  
(here goes on with parameters of the other 3 memory banks).

With dmidecode we can find out some of the data to write in config.plist: DataWidth, ErrorConnection, FormFactor, TotalWidth, Type, TypeDetail, BankLocator, DeviceLocator, Speed, PartNumber, AssetTag and Manufacturer. The value of MaxCapacity is specified by the motherboard manufacturer. SerialNumber can be seen on the label attached to each memory module.

Fill in the config.plist data

With the data obtained from dmidecode, motherboard specifications, and memory module label, fields in config.plist can be filled in correctly. These data are from my system, you have to change them for yours if they are different.

DataWidth: 64 (current RAM usually is 64-bit)
ErrorCorrection: 3 (none)
FormFactor: 9 (DIMM)
MaxCapacity: 128 GB (137438953472 bytes)
TotalWidth: 64 (matches DataWidth)
Type: 26 (DDR4)
TypeDetail: 128 (Synchronous, bit 7)
AssetTag: 9876543210 (dmidecode)
BankLocator: BANK 0 / BANK 1 / BANK 2 / BANK 3
DeviceLocator: ChannelA-DIMM0 / ChannelA-DIMM1 / ChannelB-DIMM0 / ChannelB-DIMM
Manufacturer: Corsair
PartNumber: CMK16GX4M2B3200C16 (manufacturer's label)
SerialNumber: 200400138487908 / 200400138487909 (manufacturer's label)
Size: 8 Gb per module (8000 MB)
Speed: 3200 MT / s.

Note: see the OpenCore Reference Manual (0.6.3) [2020.10.24] for allowed values in these keys.

Edited by miliuco

@1Revenger1 @Hervé I think you are both right.

When installing OC 0.6.3 I got "unable to parse configuration" errors and, when I saw this new key, I thought the bug was there. So I tried to learn how the Memory section is filled.
After reading you, I have set CustomMemory to false and I have deleted all the keys that are included into Memory and Big Sur boots up and works the same. Only difference is that some insignificant data is missing in System Profile - Memory but it seems purely cosmetic because memory is well recognized, without the need for these keys.
Thank you!

memoria3.jpg

Edited by miliuco

I don't think you have to add that Memory section to your config.plist unless you really need it.

My mistake. I see now that, in Sample.plist from OC 0.6.3, Memory section does not appear and CustomMemory is false but, in SampleCustom.plist, CustomMemory is true and full Memory section is present.
When I installed 0.6.3 I should have taken SampleCustom.plist and worked with this file instead of Sample.plist.
:|

Modified the text of the article in the first post to adapt to what is described in the rest of the posts.

"In Opencore (OC) 0.6.3, still in beta phase, a change has been made to SampleCustom.plist file, a new Memory section has been added within PlatformInfo, it describes a series of RAM memory parameters such as defined in the SMBIOS specification.

Note: article useful only for those cases where memory has errors in SMBIOS and it is convenient to define its parameters manually. Most users start from Sample.plist file (instead of SampleCustom.plist file) and Memory section is absent from it, this article is not necessary for them. The difference is the new CustomMemory key which, if set to true, requires filling the Memory section but, if set to false, allows that section to be completely omitted."

Sorry for the inconveniences.

Edited by miliuco
  • 2 weeks later...
  • Hervé changed the title to OpenCore 0.6.3: new memory properties section
  • 2 weeks later...

Thanks very much for the tutorial, it was very helpful!

 

Does anyone know if it is possible to use CustomMemory to avoid the issue with MacPro 7,1 SMBIOS, where the following error is seen, both as a notification and in About This Mac -> Memory:

 

bGHwmFA.pngOKsFacp.png

 

There is a kext to fix this, MacProMemoryNotificationDisabler.kext.  However this kext cannot currently work on BigSur, due to Lilu no longer being able to apply the same patches.

 

I saw a post on Reddit that indicated that filling out CustomMemory would allow fixing this problem without that kext.  But it hasn't helped - I still get that warning (I'm currently testing in Catalina 10.15.7).

 

My CustomMemory settings are working - for example I can now see manufacturer and serial number details that I couldn't before (I entered fake details for now because dmidecode is not showing me my real serial numbers):

OX5Olhi.png

 

Below is the config I am using in OpenCore 0.6.3.  I filled out the details using dmidecode as described in the OP.

 

I have also tried adding four extra empty memory slots, to match the Mac Pro's 12.  And I've tried various values for MaxCapacity: 256GB (the real max on this board), 1.5TB (the max on the Mac Pro, and what's shown by dmidecode), and 768GB (the value that the memory alert claims is my maximum.)

 

If anyone has any idea whether I can fix this error, or perhaps I have some incorrect config here, I'd be most grateful.

 


<key>Memory</key>
    <dict>
      <key>DataWidth</key>
      <integer>64</integer>
      <key>ErrorCorrection</key>
      <integer>3</integer>
      <key>FormFactor</key>
      <integer>9</integer>
      <key>MaxCapacity</key>
      <integer>1649267441664</integer>
      <key>TotalWidth</key>
      <integer>72</integer>
      <key>Type</key>
      <integer>26</integer>
      <key>TypeDetail</key>
      <integer>128</integer>
      <key>Devices</key>
      <array>
        <dict>
            <key>AssetTag</key>
            <string>123456789</string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_A1</string>
            <key>Manufacturer</key>
            <string>Patriot</string>
            <key>PartNumber</key>
            <string>ViperSteel0001</string>
            <key>SerialNumber</key>
            <string>1234000</string>
            <key>Size</key>
            <integer>32768</integer>
            <key>Speed</key>
            <integer>2666</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string></string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_A2</string>
            <key>Manufacturer</key>
            <string></string>
            <key>PartNumber</key>
            <string></string>
            <key>SerialNumber</key>
            <string></string>
            <key>Size</key>
            <integer>0</integer>
            <key>Speed</key>
            <integer>0</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string>123456789</string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_B1</string>
            <key>Manufacturer</key>
            <string>Patriot</string>
            <key>PartNumber</key>
            <string>ViperSteel0001</string>
            <key>SerialNumber</key>
            <string>1234001</string>
            <key>Size</key>
            <integer>32768</integer>
            <key>Speed</key>
            <integer>2666</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string></string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_B2</string>
            <key>Manufacturer</key>
            <string></string>
            <key>PartNumber</key>
            <string></string>
            <key>SerialNumber</key>
            <string></string>
            <key>Size</key>
            <integer>0</integer>
            <key>Speed</key>
            <integer>0</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string>56</string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_C1</string>
            <key>Manufacturer</key>
            <string>Patriot</string>
            <key>PartNumber</key>
            <string>ViperSteel0001</string>
            <key>SerialNumber</key>
            <string>1234002</string>
            <key>Size</key>
            <integer>32768</integer>
            <key>Speed</key>
            <integer>2666</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string></string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_C2</string>
            <key>Manufacturer</key>
            <string></string>
            <key>PartNumber</key>
            <string></string>
            <key>SerialNumber</key>
            <string></string>
            <key>Size</key>
            <integer>0</integer>
            <key>Speed</key>
            <integer>0</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string>123456789</string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_D1</string>
            <key>Manufacturer</key>
            <string>Patriot</string>
            <key>PartNumber</key>
            <string>ViperSteel0001</string>
            <key>SerialNumber</key>
            <string>1234003</string>
            <key>Size</key>
            <integer>32768</integer>
            <key>Speed</key>
            <integer>2666</integer>
        </dict>
        <dict>
            <key>AssetTag</key>
            <string></string>
            <key>BankLocator</key>
            <string>NODE 1</string>
            <key>DeviceLocator</key>
            <string>CPU1_DIMM_D2</string>
            <key>Manufacturer</key>
            <string></string>
            <key>PartNumber</key>
            <string></string>
            <key>SerialNumber</key>
            <string></string>
            <key>Size</key>
            <integer>0</integer>
            <key>Speed</key>
            <integer>0</integer>
        </dict>
      </array>
    </dict>

 

  • 2 weeks later...

Dortania now have a published guide showing how to use CustomMemory to fix the MacPro 7,1 Memory Notification issue: https://dortania.github.io/OpenCore-Post-Install/universal/memory.html

 

I was right that adding 12 slots to match the Mac Pro was important, but it required that all 12 slots show as filled before the memory error goes away.

×
×
  • Create New...