[TOOL] UEFI Editor

do you mind sharing how/what was changed?

Before I came back to this thread I messed around with AMIBCP 5.02 and from this tool I was able to modify the BIOS defaults to enable “most” ASPM, except one of the most important ones (I think).

“DMI Link ASPM Control” - if I enable this setting, doesn’t matter which option, anything other than “Disabled” causes an unbootable system (no BIOS video output) I am not sure why.

Does anyone have any pointers? I added my modified bios that has almost all settings I think I need except this one in case anyone doesn’t mind looking to see if maybe ASPM DMI isn’t working due to another setting(s) not being enabled.

https://drive.google.com/drive/folders/1eZYzUggEcUpAKu_IWOAou3J4AYxUunv1?usp=sharing

The Setup section has undergone almost the same changes as before. The options you highlited were unsuppressed with ‘False’ state. Method used by UEFI Editor is not that proven, in my opinion. I also made changes to AMITSE which should put the CPU config menu on the top. Sort of a plan B if it become inaccessible again after changing the Setup.

Do you have any plans to support Aptio IV ?

Probably not

Hello,
I am French and speak bad English. Sorry, I use an automatic translator…
Thank you for your work.
I have an Erying Itx with a 12900HK.

To be able to access overcklocking on these motherboards is really good.
I tried the 2 mod for Erying 12th Itx, mod8 and mod9 and the original Bios you gave the link.
All three work well but with two curious things:
The first.
They don’t access my Rtx 3060. They only display on the embedded intel. Never on the Nvidia. I tried all the combinations of parameters. Is there one well hidden and that I would not have seen?
The second one…
When I stop windows, the screen becomes black, everything is inactive but the fans the motherboard, graphics etc are still in operation.
I did “clear Cmos” but nothing changes.

With the latest Bios found on the site of Erying, I do not have these problems.

Do you have an idea?

Thank you for sharing your knowledge, I hope to enjoy two more.
Best regards.

I have this board: X10DRG X10DRG-OT+-CPU | Motherboards | Products | Super Micro Computer, Inc.

Previously I added re-bar successfully and I used AMI UEFI editor to enable some menus by both changing suppress and access level. The menu still doesn’t show up but some of the others do. https://imgur.com/a/ckJybFt

The top 2 enable but the bottom 2 do not, whether access level is 1 or 9.

Is there another way to enable sleep, perhaps another module that should be changed. Would all these enable if I used the manufacturing mode jumper?

edit: I changed IDs to 05 and I can see one more menu but not the one with the suspend limit ( ACPI Sleep State). If I remove both conditions for it, both “09” menus disappear.

Also added intelRCsetup but I cannot enable the overclocking page. Even if I unsupress it with the editor the page won’t show. Cannot change access levels because there is no body bin for the platform dxe module. Don’t know what else to do. Maybe UMAF tool can edit all of these.

edit2: Used the UMAF tool and enabled S3 sleep but still only see s2idle. I am out of ideas.

Is it possible to unhide some menu on this BIOS without flashing a new BIOS?

BIOS: Filebin | rozxv4gpyiwlpmtb

I mean something “on the fly” like explained here

Hello

Can you allow multi-byte values please for numeric fields, for example if the maximum (or minimum) uses 2 bytes … ? Or more bytes ?

I would like to update by Precision Boost Overdrive (PBO) parameters for Ryzen CPUs (PPT, TDC, EDC), but the JavaScript form only allows me to input a single byte in hexadecimal, and I can not input 300 Ampers for EDC

I got something like this. I cant access 0x2712 advanced menu, how to make it works?

Hello.
I’m up to try adding more options to the tool. Could you clarify my understanding of code? I need help because when I add another bytes to array, the tool starts changing the values itself with no input from user.

Are my comments correct?

function getAccessLevels(
  bytes: string,
  hexSetupdataBin: string
): [string, string, string, Offsets] | [null, null, null, null] {
  const byteArray = bytes.split(" ");
  const regex = new RegExp(

      //Sort by Question ID
      byteArray[6] +
      byteArray[7] +

      //Skip 14 bytes and parse AccessLevel
      ".{28}(..).{6}" +

      //Sort by Description string ID, skip 26 bytes, sort by Name string ID
      byteArray[4] +
      byteArray[5] +
      ".{52}" +
      byteArray[2] +
      byteArray[3] +

      //Skip 2 bytes and parse defaults
      ".{4}(..)(..)",
    "g"
  );

Optimal and Failsafe are one byte fields. Use this method for now.

What exactly are you trying to do?

I tried to add a field that controls “page id”.

Like
".{20}(....).{n}"

See the .pdf

I was half successful. The new field displayed the value, but you can’t enter two bytes. And the tool went crazy changing different values.

Sorry, but I still have no clue what you’re trying to do or what the purpose of controlling “page id” is.


UEFI Editor allows changing the target form of top-level references in Menu. I want to make the target of “Ref To” entrys type changable as well. In fact, page id is assigned in any type. In any other non-“Ref To” type it is just “FF FF”.
Is this not feasible?

UEFI Editor is not happy about Dell, Asus, Gigabyte desktop bios. Changes to top-level references do not work as expected.

So, to sum this up: setupdata stores the target Forms of Ref Prompts in 16 bit fields, and the goal is to parse those and add a new column to the table that lets you change the target Form to anything you want?

Yes. Exactly.


I was scratching my head what’s the problem the entire yesterday afternoon.

I tried to parse all bytes in the same Function.
function getAccessLevels(
  bytes: string,
  hexSetupdataBin: string
): [string, string, string, string, Offsets] | [null, null, null, null, null] {
  const byteArray = bytes.split(" ");
  const regex = new RegExp(
      byteArray[6] +
      byteArray[7] +
      ".{20}(....).{2}" +
      ".{2}(..).{6}" +
      byteArray[4] +
      byteArray[5] +
      ".{52}" +
      byteArray[2] +
      byteArray[3] +
      ".{4}(..)(..)",
    "g"
  );

  const matches = [...hexSetupdataBin.matchAll(regex)].filter(
    (element) => (element.index as number) % 2 === 0
  );

  if (matches.length === 1) {
    const match = matches[0];
    const index = match.index as number;

    const offsets: Offsets = [
      decToHexString((index + 24) / 2),
      decToHexString((index + 32) / 2),
      decToHexString((index + 104) / 2),
      decToHexString((index + 106) / 2),
    ];

    return [match[1], match[2], match[3], match[4], offsets];
  }

  return [null, null, null, null, null];
}

In result the tool went crazy overlapping one value with another.
Then I reached out to you to confirm my understanding of the regular expression in th code. But instead of an answer I got twice questioned. No problem.

Today I decided to separate Page ID parsing to a different function.
function getPageIDs(
  bytes: string,
  hexSetupdataBin: string
): [string, Offsets2] | [null, null] {
  const byteArray = bytes.split(" ");
  const regex = new RegExp(
      byteArray[6] +
      byteArray[7] +
      ".{20}(....).{12}" +
      byteArray[4] +
      byteArray[5] +
      ".{52}" +
      byteArray[2] +
      byteArray[3],
    "g"
  );

  const matches = [...hexSetupdataBin.matchAll(regex)].filter(
  (element) => (element.index as number) % 2 === 0
  );

  if (matches.length === 1) {
    const match = matches[0];
    const index = match.index as number;

    const offsets: Offsets2 = [
      decToHexString((index + 24) / 2),
    ];

    return [match[1], offsets];
  }

  return [null, null];
}

Somehow that helped.
Probably I missed something yesterday trying to do the job with the only function. Or I might misunderstood regex?


Anyways, I’ve managed to add the column. GitHub - Maxinator500/UEFI-Editor: Aptio V UEFI Editor

I was asking since I figured you’d prefer if I implemented it in the main branch. Regarding the getAccessLevels function: for some reason, your fork has 1451 additions and 1519 deletions, so I can’t tell what’s going on.

If you switch to ignore whitespace, there will be 116 additions.

Oh, that commit is using a separate function and property. Anyway, you have to keep the order of offsets in the array the same since they’re being accessed by index here. In hindsight, I should’ve just used an object with proper property names, but back then I was planning on keeping the .json somewhat compact because it was meant to be an IFR Formatter output replacement (which is whatever now since I wrote another formatter). I’ll change that array to an object eventually to make it less confusing.
Regarding the page IDs: I was thinking of just adding a dropdown to the “Info” column for Ref Prompts to avoid making the table even wider. I’ll try to confirm that this method works on various boards before implementing it.