)]}'
{
  "commit": "9a4c4c3024a20bfe134bf93ca04a3634848dbd39",
  "tree": "b53532d9affed9129c64120b916cf5f7bd016d97",
  "parents": [
    "88da05e1742894774144bc6aa750e742d0b10291"
  ],
  "author": {
    "name": "Nico Huber",
    "email": "nico.h@gmx.de",
    "time": "Mon Sep 16 22:05:11 2019 +0200"
  },
  "committer": {
    "name": "Nico Huber",
    "email": "nico.h@gmx.de",
    "time": "Fri Oct 04 22:10:27 2019 +0000"
  },
  "message": "gma: Refactor Update_Outputs()\n\nIn Update_Outputs(), we used to have two steps, iterating over\nall available pipes: We disabled all pipes whose mode changed\nor that would be disabled otherwise. Then, we enabled all pipes\nwith new modes.\n\nAs checks for validity of the configurations were only done on\ndemand in the second step, that left us with no knowledge about\nwhat configs would actually be tried. To make this information\navailable for future work, we add a validation step before the\nexisting two. That gives us:\n\n 1. Validate all new configs\n 2. Disable pipes\n    - whose mode changed\n    - that were disconnected\n    - whose config didn\u0027t validate\n 3. Enable/update pipes with new configs\n\nThis way, we can make global decisions ahead of 2. and 3. based\non the remaining, _valid_ configurations.\n\nWe had to turn Pipe_Setup.Scaler_Available() into a Reserve_Scaler()\nso we can keep track which new configuration gets to use a scaler.\nG45 is still the only case where we have less scalers than pipes\navailable. To keep that transparent to Update_Outputs() we add the\nopaque type `Scaler_Reservation`.\n\nThe `Loop_Invariant` of 1. allows us to keep the validation\nin mind, to satisfy pre-conditions of the various steps ahead.\nTo not lose the validation, Fill_Port_Config() needs a post\ncondition and a little restructuring to prove it.\n\nChange-Id: I079ae8f85c821a272b5d095c1ef437ee804aa9ac\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.coreboot.org/c/libgfxinit/+/35528\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "162c9c65fbbd06e9732f67ca71ff976db1c06094",
      "old_mode": 33188,
      "old_path": "common/hw-gfx-gma-config_helpers.adb",
      "new_id": "ede140cce77cc6f4ae9aaaafd7d4a91838f8ed3c",
      "new_mode": 33188,
      "new_path": "common/hw-gfx-gma-config_helpers.adb"
    },
    {
      "type": "modify",
      "old_id": "f02b6e54ac7c36c763465da6abf9334f301d542f",
      "old_mode": 33188,
      "old_path": "common/hw-gfx-gma-config_helpers.ads",
      "new_id": "9d689c7e529df5d0b3b0005f750c2647f7d51bc0",
      "new_mode": 33188,
      "new_path": "common/hw-gfx-gma-config_helpers.ads"
    },
    {
      "type": "modify",
      "old_id": "000c53687717acf57ef024c23d6cf4f363c906ce",
      "old_mode": 33188,
      "old_path": "common/hw-gfx-gma-pipe_setup.adb",
      "new_id": "82f5222eafbb30fbc37d875a3090e9dfdfc55289",
      "new_mode": 33188,
      "new_path": "common/hw-gfx-gma-pipe_setup.adb"
    },
    {
      "type": "modify",
      "old_id": "3ecb6ddd00c6bbeeeac40050435e4e72382809b7",
      "old_mode": 33188,
      "old_path": "common/hw-gfx-gma-pipe_setup.ads",
      "new_id": "960e70f103a9f8dbbd41ad55450ecbdd86b49f97",
      "new_mode": 33188,
      "new_path": "common/hw-gfx-gma-pipe_setup.ads"
    },
    {
      "type": "modify",
      "old_id": "dbdee5c9f2374f7f12ef0ae7469585252e8eef6c",
      "old_mode": 33188,
      "old_path": "common/hw-gfx-gma.adb",
      "new_id": "269feec6c08d82fa0465479c2c1fc2ad0a6cbe8b",
      "new_mode": 33188,
      "new_path": "common/hw-gfx-gma.adb"
    }
  ]
}
