)]}'
{
  "log": [
    {
      "commit": "5b4695ce8ba39f289436bd1a680e11c165721408",
      "tree": "8550f6fdd54b522f0009109310db541edbb74d18",
      "parents": [
        "7224085ced4e015ad86673d061cd723b17492608"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Aug 02 22:56:25 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Aug 08 21:58:11 2024 +0000"
      },
      "message": "README: Dial laptop warning down a little\n\nSo far no issues with laptops of the last decade.\n\nChange-Id: If0e0f7b75bf33385ea0ae42aed1014542d8c1f7e\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/221\n"
    },
    {
      "commit": "7224085ced4e015ad86673d061cd723b17492608",
      "tree": "98d8f20b04cc465c24c2c499e484de943227cf82",
      "parents": [
        "448457ad4bce249d0165d77f23ea18fb4946508c"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 00:04:37 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Aug 08 21:56:13 2024 +0000"
      },
      "message": "udev rules: Add some more IDs\n\nAdd IDs for Altera USB Blaster, DirtyJTAG, FTDI FT232H, FTDI FT4222H,\nand PICkit2.\n\nChange-Id: I33c69d1ab5db44d6b9761b3d062ed4b66b798f92\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/199\nReviewed-by: Nicholas Chin \u003cnic.c3.14@gmail.com\u003e\n"
    },
    {
      "commit": "448457ad4bce249d0165d77f23ea18fb4946508c",
      "tree": "a1de3df939258bdb95852e1d86807fcdbdb8af88",
      "parents": [
        "e39549b56a4a79a7e4fffa987451b8197053e7ea"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 00:02:54 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Aug 08 21:56:13 2024 +0000"
      },
      "message": "ch347_spi: Add CH347F ID and loop over the entries\n\nTested with CH347T in mode 1 and CH347F.\n\nChange-Id: I2f8246521b359c5cf574b952b32bee603abcc800\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/198\nReviewed-by: Nicholas Chin \u003cnic.c3.14@gmail.com\u003e\n"
    },
    {
      "commit": "e39549b56a4a79a7e4fffa987451b8197053e7ea",
      "tree": "afb761d5402a536539d4fb2d881c76704a98444e",
      "parents": [
        "dfd064759b416463244aafea80a5b7120ef8e4e1"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Jul 27 23:58:32 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Aug 08 21:56:13 2024 +0000"
      },
      "message": "ch347_spi: Search for compatible USB interface\n\nThe newer CH347F version uses a different interface number. Hence,\nlook for the interface with \"vendor specific\" class, which is what\nthe SPI interface uses.\n\nTested with the original CH347T in mode 1 and upcoming CH347F.\n\nChange-Id: I16d66b2562d9d2ec1540949d63752e939540db5d\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/197\nReviewed-by: Nicholas Chin \u003cnic.c3.14@gmail.com\u003e\n"
    },
    {
      "commit": "dfd064759b416463244aafea80a5b7120ef8e4e1",
      "tree": "b1b636199d652391f66e7af12b306877d77b1aee",
      "parents": [
        "b2ad9fd9186a0f6fea3e5b64415c1e5d1a19baa4"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 23:45:05 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ich_descriptors: Refactor component density handling\n\nIntroduce a new marker CHIPSET_HAS_NEW_COMPONENT_DENSITY and order\nthe actual chipset values around it. This move Bay Trail up before\nall 8-series PCHs.\n\nChange-Id: I1f4d724e2e2ef038aa6a56feb1578208afbbcd99\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/181\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "b2ad9fd9186a0f6fea3e5b64415c1e5d1a19baa4",
      "tree": "c1c6ea1be6e93dbc787ba023f391c8e140d3112d",
      "parents": [
        "140e22f260f7d96054207839bedf73aaae670d65"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 23:18:53 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ich_descriptors: Make use of SPI_ENGINE_PCH100 marker\n\nTested reading on ADL-P, log output stays consistent. Also compared\noutput of `ich_descriptors_tool\u0027 for various descriptors.\n\nChange-Id: I9f47ac571afd481998f56da0bd9481931353324a\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/180\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "140e22f260f7d96054207839bedf73aaae670d65",
      "tree": "5ebc8fb6d9d7f8c5eb5d175833ab434dce0bc88a",
      "parents": [
        "869f0e77ad1203ae078163ddfd32b0b08bf3f135"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 23:18:53 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "chipset_enable: Make use of SPI_ENGINE_PCH100 marker\n\nTested with 7 series PCH and ADL-P, log output stays consistent.\n\nChange-Id: I5b0b4d4e5f5a383c5a54342472b29eb73e78754b\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/179\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "869f0e77ad1203ae078163ddfd32b0b08bf3f135",
      "tree": "e453d6939c74035f6f1d7ea3cce79713efebf58d",
      "parents": [
        "eeee91bd73ffac9c225a1b86a6cd0c96997f589b"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 22:58:39 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ichspi: Use `swseq_data\u0027 on ICH7 paths too\n\nTested read/erase/write on ThinkPad T60 (ICH7), reading on ADL-P.\n\nChange-Id: I0682e8fe811b6cc54102035cb3f1f834b8792b0a\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/178\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "eeee91bd73ffac9c225a1b86a6cd0c96997f589b",
      "tree": "6fe1ea8ca8844390e1a2b30bb9670f06b1a7d56c",
      "parents": [
        "ecba1d87f1054a286796489a570a6b4614ec1fda"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 21:12:21 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ichspi: Replace all switch/case on `ich_generation\u0027\n\nTested read/erase/write on ThinkPad T60 (ICH7), reading on ADL-P.\n\nChange-Id: Idcddc19cb18abc418eb2aecbeb75b9926971cc4c\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/177\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "ecba1d87f1054a286796489a570a6b4614ec1fda",
      "tree": "dd424b4568d7ed3d72f713ceae6f5dcb87756ce4",
      "parents": [
        "e8babf4ab03842fc1ed59f8c3b72459ca9775e2b"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 21:03:27 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ichspi: Drop redundant bail-out cases in ich_set_bbar()\n\nich_set_bbar() is never called for ICH8 nor Bay Trail.\n\nChecked verbose output stays the same on ThinkPad T60 (ICH7).\n\nChange-Id: Ia4af7b4543081f2dfa850c4343989a2f158b43c5\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/176\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "e8babf4ab03842fc1ed59f8c3b72459ca9775e2b",
      "tree": "3103eb005c1de66e2501dc969c67ca690d0c436f",
      "parents": [
        "fda324bfc3c09cce47fe1947f6a2883b357d7f1d"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 20:40:56 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ichspi: Use a single check to enable hwseq for PCH100+\n\nThe only difference between these blocks was the debug message printed.\nLet\u0027s not be that picky and unify the code.  It does not only simplify\nthe condition but also helps to avoid mistakes:  C620 series Lewisburg\nwas most likely missed here earlier.\n\nChange-Id: Ic802c6327afdea86a0f50ced53deabe8c2f36175\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/175\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "fda324bfc3c09cce47fe1947f6a2883b357d7f1d",
      "tree": "f2411a115e7d4a7d8222aa9c90aba3243c80921e",
      "parents": [
        "a1f6476a65bda5262d46430724a3af4b49bcd9e7"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 20:36:21 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ichspi: Introduce SPI_ENGINE_PCH100 marker\n\nUse a new SPI_ENGINE_PCH100 marker in ich9_spi_init(). Suddenly this\nfunctions becomes more readable again.\n\nTested read/erase/write in `swseq\u0027 and `hwseq\u0027 modes with 7 series \u0026\nreading with ADL-P. Log output stays consistent.\n\nChange-Id: Iff03354ee886eb1ea80e37e50914b8afff08a29e\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/174\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "a1f6476a65bda5262d46430724a3af4b49bcd9e7",
      "tree": "4c03ecc180e60864fcbf59952c01c58390921eed",
      "parents": [
        "3f75d4476da015ae1ee033c1de1ad4dc08f66b0d"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 20:23:28 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ichspi: Split ICH7 init out\n\nThe original, ICH7 init only shared about three lines with the newer,\never growing ICH9+ init. That\u0027s not worth an indentation level in an\nendlessly long function, so split it out.\n\nWe introduce a kind of \"breakpoint\" into the `ich_chipset\u0027 enum:\n\n  SPI_ENGINE_ICH9\n\nThis marks all chipset entries below it as supporting this code path\nand should help to avoid long `case\u0027 lists.\n\nTested read/erase/write on ThinkPad T60 (ICH7).\n\nChange-Id: I41e46d12e02c1343e636b47b2378db86e76af95e\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/173\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "3f75d4476da015ae1ee033c1de1ad4dc08f66b0d",
      "tree": "f4c241b0df2bc758fc91c999f1326a06d0edec34",
      "parents": [
        "2862011212da1745e4238381bfe16f0dab3fd7c1"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 14 19:17:56 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 28 15:02:49 2024 +0000"
      },
      "message": "ich_descriptors: Remove `Dual Output Fast Read\u0027 for newer gens\n\nThis is queried via SFDP since the Cannon Point PCH / Gemini Lake.\n\nAvoid using a relational comparison so we don\u0027t have to worry when\nchanging the enum order.\n\nTested `flashprog\u0027 on ADL-P and `ich_descriptors_tool\u0027 with various\ndescriptors.\n\nChange-Id: I4c60e8c01a019303a830d46561c80e6ad462bb7c\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/172\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "2862011212da1745e4238381bfe16f0dab3fd7c1",
      "tree": "c650132ba159d9fa5693afd667768f86956645e4",
      "parents": [
        "4ac536bde43a1d64e11034cab34aabd7a6efd5dc"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 21 15:43:59 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25: Try to set volatile quad-enable (QE) automatically\n\nSome chips have a volatile QE bit. Setting this won\u0027t wear the status/\nconfiguration register, so we\u0027ll try to do so automatically.\n\nChange-Id: I6a4b864d7af1f3ecedd95524f127b5486f999933\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/191\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "4ac536bde43a1d64e11034cab34aabd7a6efd5dc",
      "tree": "ceb3d304075fadbe31ed8d0d25dc8d4b8b8e60fb",
      "parents": [
        "b1d2baea270c1177a78d1672b4f8dd42ed246eb4"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 21 00:22:29 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25_statusreg: Allow to write (non-)volatile bits specifically\n\nThere\u0027s a subtle difference between prepending a write-status-register\ncommand with a write enable (WREN)  or an enable write status register\n(EWSR): The former targets non-volatile bits, while the latter targets\nvolatile bits, i.e. register bits that do not survive a reset.\n\nSometimes bits are implemented as both volatile and non-volatile. Then,\nthe non-volatile state is loaded into the volatile registers after chip\nreset, and writes with a WREN target both.  So far, we simply used WREN\nwhen possible.  This can, however, lead to unnecessary wear of the non-\nvolatile bits. Flash datasheets do not mention any maximum write cycles\nfor them. However, it is unclear if this is an academic issue, i.e. the\nmanufacturers account for the wear and implement redundancy, or if they\nsimply don\u0027t expect that many configuration changes.\n\nFor a start, allow to specify explicitly which kind of register bits we\nwant to write. We keep the current behavior. However, the logic to dis-\nable block protections automatically should be revised  to prefer vola-\ntile writes.\n\nChange-Id: I807a2c48f4eaa85d5a10b37362e71818359a4c93\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/190\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "b1d2baea270c1177a78d1672b4f8dd42ed246eb4",
      "tree": "26b280f6c8ffbb9f5c73483491df5ffe0abf4f66",
      "parents": [
        "d0afeef1980da55e602955b1ebc8b5eca27fd9b1"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 16:10:15 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "dediprog: Fix and enable 4BA modes for SF600Plus-G2\n\nThis was already enabled for the SF600 with protocol v3, however\nnever implemented.  The read path is now covered by the configu-\nrable read command discovered during multi-i/o development.  For\nwrites we have to override the command if no native 4BA write is\navailable and we are in 4BA mode.\n\nTested with \"SF600PG2. V:01.01.012 HW:01.00\" and a W25Q256JV..Q\ntreated as a W25Q256FV (i.e. no native-4BA erase/write opcodes).\n\nChange-Id: I7cc537a96d470461ce35e4c4e97435c4ecb0c4ca\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/169\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "d0afeef1980da55e602955b1ebc8b5eca27fd9b1",
      "tree": "a03ebaf41621251945d7e387b45ed5b6dd85938d",
      "parents": [
        "1b1deda80bbd7f56b8047fad32badb749eeefffb"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 16:08:29 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "dediprog: Disable 4BA modes for SF100 w/ protocol v2\n\nIt was enabled in commit a32d47f14886 (dediprog: Disable\nSPI_MASTER_NO_4BA_MODES for additional devices), because\nthe hardware can handle it in theory. However,  it never\nwas implemented on our side.\n\nChange-Id: If4082d4c0ab56f544b48bc827ecee2c23bd976f2\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/168\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "1b1deda80bbd7f56b8047fad32badb749eeefffb",
      "tree": "e7058d9d175d08ed2542f6e34be0842a7ade8f57",
      "parents": [
        "a1b7f3521f66a19a2d4c9a6a373c5a7ab36e1473"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Apr 18 00:35:48 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "Implement QPI support\n\nWith the quad-i/o support in place, this is actually straight-\nforward:\n* we check for compatibility of the flash chip and programmer,\n* select an appropriate fast-read function, and\n* always set the respective io-mode when passing a SPI command\n  to the programmer.\n\nTested with FT4222H + W25Q128FV and linux_gpio_spi + MX25L25645G.\n\nChange-Id: I2287034f6818f24f892d66d1a505cb719838f75d\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/165\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "a1b7f3521f66a19a2d4c9a6a373c5a7ab36e1473",
      "tree": "fd996296810ab45fe99d29d8dc254f6d496f3091",
      "parents": [
        "008a44fa1c33b8a77c90b4e9dba267ae23c01056"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 18:32:11 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "dediprog: Implement multi-i/o reads\n\nThis implements i/o-mode switches and opcode handling for multi-i/o\nreads with protocol versions 2 and 3. The mode switching is done by\na simple command  that takes an enum just as our internal `io_mode`\nas argument.\n\nThe opcode handling differs between protocol versions. For protocol\nv2, we keep the current behavior for single-i/o operations and only\nset the matching opcode. Tests with an SF600Plus-G2 have shown that\nthe programmer automatically chooses the address length  and number\nof dummy cycles. It is unknown, however,  if it chooses these para-\nmeters based on the opcode or the configured i/o mode. For dual-out\nreads,  it seems to choose the wrong number of dummy cycles. Hence,\nwe mask the respective support bit for the v2 case.\n\nFor protocol v3,  a new `read mode\u0027 was discovered in traces of the\nDediprog Windows application.  It allows to explicitly specify  the\nopcode, the address length, and the number of dummy cycles. We call\nthis READ_MODE_CONFIGURABLE. As this is the only way to make use of\nthe additional command bytes of the v3 protocol, we can assume that\nthis mode always works with v3.\n\nFor partial reads, i.e. not multiples of 512B blocks,  that have to\ngo through dediprog_spi_send_command(),  we temporarily disable the\nchosen `.spi_fast_read` function. This is necessary, because multi-\nio is not supported on this path.\n\nWe enable dual i/o by default for protocol v3 devices. This should\nwork out of the box with many compatible flash chips. The command-\nline logic is a little convoluted this way,  but can be refactored\nonce protocol v2 devices are tested.\n\nChange-Id: Ib07b1b61eccc19c7ead9f64c980b37feabfa70a8\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/114\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "008a44fa1c33b8a77c90b4e9dba267ae23c01056",
      "tree": "896b993627c146b89838742c26a9c12cefd27c69",
      "parents": [
        "4760b6ec1f7fbcee1bf238a25e3df56a86327a5a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 14 23:39:47 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "dediprog: Split read/write command preparation by protocol\n\nThere has been a forest of `if`s growing inside prepare_rw_cmd(). And\nthe V3 protocol allows for more flexibility that would result in even\nmore branches if we\u0027d continue adding to this function.\n\nInstead, split it into one function per protocol version  and provide\na pointer to it in our context structure. This will allow us to adapt\nthe V3 function more easily and only sacrifices a little code sharing\nbetween V2 and V3.  We also let it return the number of bytes for the\ncommand packet and define a maximum size, to simplify the API.\n\nChange-Id: Ibe9da3d3f1aac74309b89f840d9ce9e6e7978405\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/126\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "4760b6ec1f7fbcee1bf238a25e3df56a86327a5a",
      "tree": "a4c3762b1228f901f62d40b53ed1a953b25926b4",
      "parents": [
        "0c9af0a639bf9180839d548f91547b58de921ca9"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Jan 06 23:45:28 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25: Implement multi-i/o reads\n\nWe describe a read operation in a new  `struct spi_read_op`. It\u0027s\ncomprised of the i/o mode, its opcode, an optional mode byte, and\nthe number of dummy bytes.\n\nBased on this information  about the various read operations, and\nthe flash and master feature flags,  we select the read operation\nwith the highest throughput.\n\nThe following assumption is made about 4BA chips: When it supports\nnative-4BA fast reads  and a multi-i/o version of the regular fast\nread, then it should also support the respective native-4BA, multi-\ni/o version (yes, JEDEC, there are too many read commands!). So far\nthis seems to hold for the chips in our database.\n\nChange-Id: I3c93e71d85f769831d637c14d3571f7ddb54d8b2\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/49\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "0c9af0a639bf9180839d548f91547b58de921ca9",
      "tree": "a0656e015b5a647cb81d8a85d427687b03a2f246",
      "parents": [
        "930d421385aae5ca93d5963fba7926970d7702e8"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun May 05 12:20:22 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25: Check quad-enable (QE) bit\n\nWhen a chip has a quad-enable bit, check its status and disable\nquad i/o if the bit isn\u0027t set. Note, some chips have a volatile\nQE bit that we could set/reset automatically without wear. This\nwould require more work on the register infrastructure and chip\ndatabase, though.\n\nChange-Id: I8a0b9b3dee14f344d4794c91d7d6fb962a8bea87\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/164\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "930d421385aae5ca93d5963fba7926970d7702e8",
      "tree": "199e15c17260fabb8e422075230621a21e064531",
      "parents": [
        "8d0f4650c73eb7bcda0b71e514c0effdf37d90b5"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat May 04 18:59:15 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25: Introduce generic spi_prepare_io()/spi_finish_io()\n\nIntroduce two new functions to be hooked up in the chip database:\n* spi_prepare_io(), and\n* spi_finish_io().\n\nThese will be used to prepare multi-i/o and QPI operations. Hence,\nhook them up to all the chips that support those. spi_prepare_4ba()\nis wrapped to account for overlaps with 4BA support.\n\nChange-Id: I444f6322b6d6a26a040cb0ca972b2c411838d702\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/163\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "8d0f4650c73eb7bcda0b71e514c0effdf37d90b5",
      "tree": "f27db276221972c6451278fa41806260ebfa7046",
      "parents": [
        "044c9dc9290565ab7b9866bb26a8d077d9c3a5d7"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat May 04 18:52:51 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25: Extract 4BA preparations into new `spi25_prepare.c`\n\nWe will have more preparation steps for fast-read operations and\nQPI in the future. Better start a new file, as `spi25.c` already\nis rather long.\n\nChange-Id: I253b270ce6796fb09e6d74903bd65a6fbc06c7d6\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/162\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "044c9dc9290565ab7b9866bb26a8d077d9c3a5d7",
      "tree": "b0d6ab8fc2df6d8ff7a91a3d197e213a7ca2a320",
      "parents": [
        "fc7c13c882067b3ad7f2f5d3846d64164b8c8c87"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Dec 29 23:26:57 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "Add FT4222H support\n\nThe FT4222H features a very different engine compared to what we are\nused to from other FTDI USB/serial chips. It doesn\u0027t do UART (at least\nnot officially), doesn\u0027t have the MPSSE engine, but has a quad-SPI\nmaster, and SPI/I2C slave support.\n\nA few similarities exist, though, so this could probably make use of\nlibftdi in the future.\n\nThere are two config-mode straps that select one of four modes:\n0. 1 data interface + 1 GPIO interface\n1. 3 data interfaces + 1 GPIO interface\n2. 4 data interfaces\n3. 1 data interface\n\nWith multiple data interfaces, GPIO pins are muxed as additional CS\nlines. The advantage of mode 0 and 3 is that apparently a bigger buffer\nis available for the data interface. Only in these modes, it gets to\nits full speed (52.8MBps according to the datasheet[1]). The CS line is\nautomatically selected based on the USB interface used. No test using\nmultiple interfaces at once were performed, though.\n\nAll the USB commands and transfer protocols were derived from traces\ngathered with the proprietary LibFT4222. The results are summarized\nin the flashprog wiki[2].\n\n[1] https://www.ftdichip.com/old2020/Support/Documents/DataSheets/ICs/DS_FT4222H.pdf\n[2] https://flashprog.org/wiki/FT4222H\n\nChange-Id: I9ee1287e13113ccf8b5ea2be4a25866413a94844\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/50\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "fc7c13c882067b3ad7f2f5d3846d64164b8c8c87",
      "tree": "d63f45915cf6dba885442cf381128bd72a781af3",
      "parents": [
        "5fc31545c979bc345c2016852bc1597b9272daec"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jan 14 23:39:40 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "linux_gpio2_spi: Implement multi i/o\n\nImplement the optional bitbang_spi calls for multi-i/o. With the new\nlibgpiod API, this is straight forward.\n\nBy default, we enable dual-i/o mode. We add the optional `io2\u0027 and `io3\u0027\nparameters, which can be used to specify additional GPIO numbers for\nquad-i/o.\n\nChange-Id: I6113a8327c08a3d55fbc0c8ffba2d1a47925de34\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/84\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "5fc31545c979bc345c2016852bc1597b9272daec",
      "tree": "4fba6e4c333706ab11ed4c02f7922e3ace55cd43",
      "parents": [
        "d16a911a77220d7cd600c749675070d204543b5d"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jan 07 15:58:34 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "bitbang_spi: Implement multi-i/o\n\nAdd some optional functions to the bitbang_spi API that will allow\nus to transfer multiple bits at once. With these, implement the\nspi_send_multicommand() API, completely with all known transfer\nmodes.\n\nChange-Id: I38346de37809118e13a059e90b9f3fff6456db15\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/82\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "d16a911a77220d7cd600c749675070d204543b5d",
      "tree": "4fd0c463d1f352b79bac82d2bb84ab99e887532b",
      "parents": [
        "226bb87b96c21fbd54061d043aca67e9a02f0aca"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jan 07 00:11:44 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "bitbang_spi: Move API into its own header file\n\nWe\u0027re going to extent it for multi-i/o.\n\nChange-Id: Ifead97d7a8f848b82a4d21c557f5d364066d5d6a\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/81\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "226bb87b96c21fbd54061d043aca67e9a02f0aca",
      "tree": "69907cf91ed509fd4dbd23a888e25605faf4475d",
      "parents": [
        "4fa39c5e016698a5241269dac13d3ad3edb8d7ed"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.huber@secunet.com",
        "time": "Tue Apr 09 23:30:34 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Add missing QE-bit definitions\n\nFor all remaining chips that are already tagged as supporting quad-i/o,\nadd missing QE-bit definitions.\n\nChange-Id: I24fa7187c528882b78ac4ba376c410e06bf44f2b\nSigned-off-by: Nico Huber \u003cnico.huber@secunet.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/124\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "4fa39c5e016698a5241269dac13d3ad3edb8d7ed",
      "tree": "8a8023031d7bc085f2bc9496bd438e1258bf1d28",
      "parents": [
        "5f50999184634a2d197495596dee9cbe3284be34"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 01:18:12 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill multi-i/o gaps in MX25U family\n\nChange-Id: I488ad3c2d2d2336cd8309514f699db797873963d\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/123\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "5f50999184634a2d197495596dee9cbe3284be34",
      "tree": "437c97035908922d7b63b1c4e6ec7d4d10088caf",
      "parents": [
        "46552c810b7501c3bbab940162fea891b42d9d14"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 01:18:12 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill multi-i/o gaps in MX25R family\n\nChange-Id: I358a0b3eb6ebad67c1e37cd61fcfee4087ede0e8\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/122\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "46552c810b7501c3bbab940162fea891b42d9d14",
      "tree": "9b703c38e183e54ac3390f1be62ff24de5b88b05",
      "parents": [
        "96786d04a9675c786c8e5ca218f58276fdaefd28"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 01:18:12 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill multi-i/o gaps in MX25L family\n\nChange-Id: I8f1f7add3847f65b058e1a6e721a356bb728cb53\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/117\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "96786d04a9675c786c8e5ca218f58276fdaefd28",
      "tree": "86b9a5e061a4eb43a4eb0798679d3ef66b2ae1a5",
      "parents": [
        "a26a3c6b6877e416681fe103478aa81121ef5f88"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Jan 06 18:30:15 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill quad-i/o gaps in XM25Q family\n\nChange-Id: Icbbc6732651696c52e236e3828820db286f5ff81\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/48\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "a26a3c6b6877e416681fe103478aa81121ef5f88",
      "tree": "f4934754df61060441e7380ce77a6142b9e95639",
      "parents": [
        "2133f596b1eb9597359b27c4dc996501dca910e1"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.huber@secunet.com",
        "time": "Fri Apr 12 19:28:28 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill dual-i/o gaps in W25X family\n\nChange-Id: I4536df38684258c780c74fc2b12830a4178f955d\nSigned-off-by: Nico Huber \u003cnico.huber@secunet.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/121\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "2133f596b1eb9597359b27c4dc996501dca910e1",
      "tree": "ed16523bfd6f8730c31f9687e708b96e22e08b9c",
      "parents": [
        "68573afd26ab16e02b7678663ee562384e552bc9"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Jan 06 18:30:01 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill quad-i/o gaps in W25Q family\n\nChange-Id: I8c53e9976b769327893838701eb0be9cff1443d7\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/47\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "68573afd26ab16e02b7678663ee562384e552bc9",
      "tree": "0a3200774a473adfe45d03cb772fba85ac8925bd",
      "parents": [
        "4da971fa6985ae7e2b0ca8031b156918c73293f8"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Jan 06 18:28:22 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Split GD25Q127C and GD25Q128C\n\nOnly GD25Q128C supports QPI.\n\nChange-Id: Iecaa15881a574426eb6889335ef6fbdfe017c617\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/46\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "4da971fa6985ae7e2b0ca8031b156918c73293f8",
      "tree": "f6511f3f2915b1ac7f8cc1985b2477161b3231d4",
      "parents": [
        "f7e2d9739b8ccbc841081337c1d7c46407b5f0cf"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 01:18:12 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Fill quad-i/o gaps in GD25*Q families\n\nChange-Id: Ice4596203384fd81244ed65e1f20e96da95b7af4\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/120\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "f7e2d9739b8ccbc841081337c1d7c46407b5f0cf",
      "tree": "0bd800c641b7930e096e74408e292df2017a51b1",
      "parents": [
        "1412d9f435ead84d612086bf0051a4c3464bd079"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Jan 18 20:28:34 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi: Allow to define a quad-enable (QE) configuration bit\n\nChange-Id: Ia6c927aeaab8de6e81313e285351ba14b3c6aa25\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/111\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "1412d9f435ead84d612086bf0051a4c3464bd079",
      "tree": "7d1e2050d97f8e12b280d267fac9a49dbab7939e",
      "parents": [
        "d518563f197241cc72f5da4b2108b2df10f00372"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Jan 06 18:25:49 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi: Rework FEATURE_QPI\n\nAlas, a single feature flag is not enough. QPI requires enter/exit\ncommands and there are at least two competing sets of opcodes. More-\nover,  the current flag  was sometimes accidentally used for chips\nthat can only do quad-i/o for address/data phases but not full QPI.\n\nSo, add a lot of new flags and go through all the entries that have\ncurrently FEATURE_QPI set.  Additionally, note the amount of dummy\ncycles required by read commands in QPI mode, and whether and how\nthese can be configured.\n\nChange-Id: Id7310af07b2fdbedb7b051e9395ea967cb345d16\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/45\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "d518563f197241cc72f5da4b2108b2df10f00372",
      "tree": "8ec807be43adf3b5c9f66a2701b7bf0ea3a4a11f",
      "parents": [
        "bd72a470b9b58386b52ca4568313be71b4d2c472"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jan 05 18:44:41 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi: Prepare for multi i/o and dummy bytes\n\nMulti-i/o commands split SPI transactions into multiple phases that\ncan be transferred over 1, 2 or 4 wires. For this, we adapt `struct\nspi_command` with a new enum, specifying the transfer mode, and ad-\nditional size fields.  While we are at it, move everything related\ninto a new header file `spi_command.h` so we won\u0027t further clutter\n`flash.h`.\n\nOn the master side, we add respective feature flags for the multi-\ni/o modes.\n\nSee also the comment in `spi_command.h` about multi-i/o commands.\n\nChange-Id: I79debb845f1c8fec77e0556853ffb01735e73ab8\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/44\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "bd72a470b9b58386b52ca4568313be71b4d2c472",
      "tree": "078afe70db3836ef41b37ce2c64fb6de67c38747",
      "parents": [
        "3d728e7524fe086e90779ea76bf2f9bd02cdf6de"
      ],
      "author": {
        "name": "Sergii Dmytruk",
        "email": "sergii.dmytruk@3mdeb.com",
        "time": "Sun Jul 24 17:11:05 2022 +0300"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25_statusreg: support reading/writing configuration register\n\nOne more variation of registers.\n\nThis one is read via a separate RDCR command, but written as if it\u0027s\nSR2 using WRSR_EXT2.\n\nPorted to flashprog w/o the FEATURE_CFGR flag, we\u0027ll already have that\ninformation in the register description.\n\nChange-Id: I45f9afcc31f1928ef6263a749596380082963de4\nSigned-off-by: Sergii Dmytruk \u003csergii.dmytruk@3mdeb.com\u003e\nOrignal-Reviewed-on: https://review.coreboot.org/c/flashrom/+/66211\nOrignal-Reviewed-by: Edward O\u0027Callaghan \u003cquasisec@chromium.org\u003e\nOrignal-Reviewed-by: Nikolai Artemiev \u003cnartemiev@google.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/71007\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "3d728e7524fe086e90779ea76bf2f9bd02cdf6de",
      "tree": "74d3bec50d87ac2fc45c1c2beaf5d780e6acda4a",
      "parents": [
        "a358b14d2e7e93e317499a687223ada2d221a36a"
      ],
      "author": {
        "name": "Sergii Dmytruk",
        "email": "sergii.dmytruk@3mdeb.com",
        "time": "Sat Nov 27 15:14:27 2021 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "spi25_statusreg.c: support reading security register\n\nNot to be confused with \"secure registers\" of OTP.\n\nSecurity register is a dedicated status register for security-related\nbits. You don\u0027t write its value directly, issuing special write commands\nwith no data set separate OTP bits to 1 automatically (WRSCUR, WPSEL\ncommands). No WREN is necessary, but at least some datasheets indicate\nBUSY state after those write commands.\n\nUnlike cases where OTP bit is part of SR and can only be written while\nin OTP mode, security register can only be written outside of the mode.\n\nThe register is found in at least these chips by Macronix:\n * MX25L6436E\n * MX25L6445E\n * MX25L6465E\n * MX25L6473E\n\nPorted to flashprog w/o the FEATURE_SCUR flag, we\u0027ll already have that\ninformation in the register description.\n\nChange-Id: Iae1753ca4cb051127a5bcbeba7f064053adb8dae\nSigned-off-by: Sergii Dmytruk \u003csergii.dmytruk@3mdeb.com\u003e\nOriginal-Reviewed-on: https://review.coreboot.org/c/flashrom/+/59709\nOriginal-Reviewed-by: Angel Pons \u003cth3fanbus@gmail.com\u003e\nOriginal-Reviewed-by: Edward O\u0027Callaghan \u003cquasisec@chromium.org\u003e\nOriginal-Reviewed-by: Nikolai Artemiev \u003cnartemiev@google.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/71006\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "a358b14d2e7e93e317499a687223ada2d221a36a",
      "tree": "5f46662a287ab6a85d9c98ba220b76f05afa40b4",
      "parents": [
        "3127db11dfecb54ea2432a6ca81ef7e7a1a383e9"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 14 18:29:06 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Jul 22 10:08:47 2024 +0000"
      },
      "message": "flashchips: Split W25Q64.W -\u003e W25Q64DW | W25Q64FW/W25Q64JW...Q\n\nThe older D versions used an extended write status register instruction\nto write both status registers at once.  The newer ones have individual\nwrite status register 2 \u0026 3 instructions.\n\nIn theory, this fixes WP support for the W25Q64DW.\n\nChange-Id: I63605d4ac640c9e299afccb3b79ebd1a8f972d4c\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/119\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "3127db11dfecb54ea2432a6ca81ef7e7a1a383e9",
      "tree": "4b17f60a5840ace90ab300c3225e3534d308ad8a",
      "parents": [
        "619d9c00a2da20744e56c805d5f0946b1b28d733"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 15:46:19 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder: Drop legacy flashrom tag collections\n\nWe used to document which images were used during release testing this\nway. Didn\u0027t turn out to be much useful, though. We\u0027ll just assume that\nthe images that were available at the time worked  (they should!). For\nreleases, we should test all available (`working\u0027 target) images.\n\nChange-Id: Ie3842cb8a8141b0ff075941e7fd4138c9c119ca9\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/145\n"
    },
    {
      "commit": "619d9c00a2da20744e56c805d5f0946b1b28d733",
      "tree": "eb05f003df3fcf88c1c04a2d66c7be07d7b995c2",
      "parents": [
        "6560bba871719a2d9ab302d2c50f77352c4aa4d4"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 20 17:51:20 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder: Use `test_build.sh\u0027\n\nUse `test_build.sh\u0027 to test builds with both Make and Meson, and to\ncompare the results. To succeed, the $(MESONARGS) have to mimic the\nbehavior of `CONFIG_EVERYTHING\u003dyes\u0027.\n\nIn the long run, we might want to use the version shipped with mani-\nbuilder instead of the tested flashprog version. Otherwise, we won\u0027t\nbe able to test older revisions of flashprog with newer manibuilder.\n\nChange-Id: Ife327e2f3e2fa9acbbfd1fa51ec0aa3c3f2489b8\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/144\n"
    },
    {
      "commit": "6560bba871719a2d9ab302d2c50f77352c4aa4d4",
      "tree": "3a96d15ddcd1230db55e1e8d3d56f4adcdc19808",
      "parents": [
        "c7b549e638d9d41097095820fd2b407d4b142d5c"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 20 17:23:21 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder/almalinux: Install `diffutils\u0027 for new `test_build.sh\u0027\n\nChange-Id: I6bb4d15761afc049cf1e7e7a2e84c13ae0eacc79\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/143\n"
    },
    {
      "commit": "c7b549e638d9d41097095820fd2b407d4b142d5c",
      "tree": "d77fac438a50441f4382b8867e189e4abe05f232",
      "parents": [
        "72b30a085de6f037b0d3069621c7c2aa6fb0bfa5"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Mar 19 14:27:43 2023 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "test_build.sh: Compare output for -L of Make and Meson builds\n\nChange-Id: I3bbf63e7efe7dd9c504c31f1a1e5794a2b09a74a\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/142\n"
    },
    {
      "commit": "72b30a085de6f037b0d3069621c7c2aa6fb0bfa5",
      "tree": "2edd2f24b04a982c26b652e4b17ebb05add3972b",
      "parents": [
        "3d2f21245ba2e764c4029987b305a972e8721331"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 21:59:19 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "test_build.sh: Don\u0027t try to run cross-compiled programs\n\nCheck the commonly used ${CROSS_COMPILE} variable. If set, return\nearly and don\u0027t run the built binaries.\n\nChange-Id: I14aad3562eb358b509ea9c7846a6cf5913e302f2\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/141\n"
    },
    {
      "commit": "3d2f21245ba2e764c4029987b305a972e8721331",
      "tree": "1828bbbb4dbdfdc39f8688b04832999d11a70cbf",
      "parents": [
        "4eb9748fdc314765f6089148d9aaa39cf84f8a1e"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 21:54:15 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "test_build.sh: Allow to override Make and Meson commands\n\nAdd a few variables that can be set in the environment. Set sane\ndefaults, but allow them to be empty. This way the calling envi-\nronment can decide which tests will be performed.\n\nTo expand multiple,  quoted arguments correctly  from the passed\n$(MAKEARGS) and $(MESONARGS), we run the actual commands through\n`eval\u0027.\n\nChange-Id: Iad8d6c7084998eda7b1f01bb6962cc3c2e90d537\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/140\n"
    },
    {
      "commit": "4eb9748fdc314765f6089148d9aaa39cf84f8a1e",
      "tree": "cc0c2fab60e2b864e795a17322969a52eeefa485",
      "parents": [
        "82794575648c57db86a2ea4fa94f778ef160cee1"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 21:44:33 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "test_build.sh: Run tests for both Make and Meson builds\n\nChange-Id: I6e6b9d103159b916a766f65184c89ddca19acf00\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/139\n"
    },
    {
      "commit": "82794575648c57db86a2ea4fa94f778ef160cee1",
      "tree": "366d5b10d2937ddde01190a03bc23e0f3c2d64ba",
      "parents": [
        "15e9b10db14f4f75309766ab2edb3c37d5b9b562"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 14:14:53 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder: Add Alpine Linux 3.18 \u0026 3.19 images\n\nChange-Id: I6cc512d113b3a0a8683d22dbde75085fa3c7c3c2\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/138\n"
    },
    {
      "commit": "15e9b10db14f4f75309766ab2edb3c37d5b9b562",
      "tree": "ae6a89c250c5791cd74490204ffcd1598054fef9",
      "parents": [
        "b8b359389f95483a04ec2d8d8cad18acff83900a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Apr 25 23:05:19 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder/alpine: Install libjaylink-dev when available\n\nThis should work since Alpine Linux v3.15.\n\nChange-Id: I7143555b486697668c3456f7d57810023dc85ef2\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/137\n"
    },
    {
      "commit": "b8b359389f95483a04ec2d8d8cad18acff83900a",
      "tree": "41026c9bdf581156372de34295927ecef69283cf",
      "parents": [
        "7b05f096f25627567fcda522b631f71c81d9a87a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 13:37:48 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder: Add images for Fedora 38..40\n\nChange-Id: I39d6acdced420cfd32dbbca98e117c0632968653\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/136\n"
    },
    {
      "commit": "7b05f096f25627567fcda522b631f71c81d9a87a",
      "tree": "02202d300e86f175ecb403d60ead6e06c9bc93a1",
      "parents": [
        "5e8b339d8be144d054032ff0e63dc1b5d209f475"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 13:38:41 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder: Add images for Ubuntu 24.04 \"Noble Numbat\"\n\nPackages for amd64 aren\u0027t up yet.\n\nChange-Id: Ic49efffa4fee4d645712a02ba1805e7b25fd8c43\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/135\n"
    },
    {
      "commit": "5e8b339d8be144d054032ff0e63dc1b5d209f475",
      "tree": "035d082da431ae21b0fa31e4550fa218cace0464",
      "parents": [
        "61da8c74ab4ff6b722689d2189cab560ea3052be"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 13:33:56 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder/anita: Add NetBSD 10.0 i386 \u0026 amd64 images\n\n`dhcpcd\u0027 forks into background more eagerly now, so we tell it\nto wait for an IP explicitly.\n\nBinary packages for `pkg_add\u0027 seem unavailable for sparc64 atm.\nHopefully, we can add that at a later time.\n\nChange-Id: I4980ad711e1a34d2fd049ee1ea53bba1f14f6310\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/134\n"
    },
    {
      "commit": "61da8c74ab4ff6b722689d2189cab560ea3052be",
      "tree": "6a763c77f4e8530f44cbabfcec6e0b70e26261ff",
      "parents": [
        "39152af8b99d91e8b91f95c7b4c567c79b4c9614"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 21:26:38 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder/anita: Export library path for libusb\n\nThis allows to actually run the built flashprog binary.\n\nChange-Id: If09c0da7c1c19c7fc948ba6e2b7537e0ff017d97\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/133\n"
    },
    {
      "commit": "39152af8b99d91e8b91f95c7b4c567c79b4c9614",
      "tree": "91623a137ae5be1ef8530555d39f5889491c22ca",
      "parents": [
        "20073e7ae60c362bc3ba2677f27dd104cf34ff24"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 20 16:42:33 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jul 12 20:54:09 2024 +0000"
      },
      "message": "manibuilder: Set sourcearcade.org as default source\n\nOlder docker images may have an outdated `origin\u0027. So override\nthis with an up-to-date URL within the Makefile.\n\nChange-Id: I00febdd587f96f0ce0781a65ed3ab3a714e6f61b\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/132\n"
    },
    {
      "commit": "20073e7ae60c362bc3ba2677f27dd104cf34ff24",
      "tree": "1aec6bc3c4584793563edc04b0a74b854f0c8628",
      "parents": [
        "3824c8d9dde3dc7c9db0f7dcdd08ee21a759dd57"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri May 10 01:31:40 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jul 07 19:37:52 2024 +0000"
      },
      "message": "Properly clear erase-block selection when bigger block is chosen\n\nWhen we choose to erase a bigger block over many smaller sub blocks,\nwe should clear the `selected\u0027 status  of sub blocks recursively. If\nnot, we risk to miss sub blocks that haven\u0027t been consolidated in an\nintermediate level of erase blocks.\n\nFor instance, considering a flash chip with three erase functions:\n\n    32x   4KiB sectors\n     4x  32KiB blocks\n     1x 128KiB chip\n\nWith the following erase pattern at the lowest, 4KiB level (`x\u0027 for\na block that is selected for erase, `.\u0027 for one left untouched):\n\n    xxx..xxx ..x..x.. xxxxxxxx x.x.....    4KiB\n\nAt the intermediate level, we would consolidate those 32KiB blocks\nthat get more than half of their sub blocks erased:\n\n    ........ ..x..x.. ........ x.x.....    4KiB\n        x        .        x        .      32KiB\n\nStill more than half of the flash gets erased, so we would consoli-\ndate this to a full chip erase:\n\n    ........ ........ ........ ........    4KiB\n        .        .        .        .      32KiB\n                     x                   128KiB\n\nThe current implementation, however, wouldn\u0027t clear the remaining\nselected blocks at the 4KiB level.\n\nChange-Id: I90181f9c53ca9aa06d353ba6dd4072efbebc260c\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/161\nReviewed-by: Angel Pons \u003cth3fanbus@gmail.com\u003e\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "3824c8d9dde3dc7c9db0f7dcdd08ee21a759dd57",
      "tree": "c232684790ea29165851ac5f314d6e7ebf44e16b",
      "parents": [
        "0d4354eee32c834a602f5bec05803bd36977cfaa"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun May 26 16:59:22 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jun 02 10:02:58 2024 +0000"
      },
      "message": "ichspi: Allow all opcodes when the \"opmenu\" isn\u0027t locked\n\nThe opmenu is not authoritative when we can re-program it on the fly.\nHence always return true in ich_spi_probe_opcode() when it isn\u0027t locked.\n\nTested by `cobra` on IRC.\n\nChange-Id: I636f00acbdfa1661c13c2d82d7d7e61fbe6b543b\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/151\nReviewed-by: Angel Pons \u003cth3fanbus@gmail.com\u003e\n"
    },
    {
      "commit": "0d4354eee32c834a602f5bec05803bd36977cfaa",
      "tree": "b21a5e04456629a1da344c0965ed90e1a31f09e8",
      "parents": [
        "5b4fdd11dd74c7f018cb04f7a27a2badc02fe182"
      ],
      "author": {
        "name": "Angel Pons",
        "email": "th3fanbus@gmail.com",
        "time": "Sun May 26 16:33:51 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Jun 02 10:01:10 2024 +0000"
      },
      "message": "flashchips: Add W25Q32JV-.M\n\nTested by `cobra` on IRC, on a ThinkPad R500.\n\nChange-Id: If1bffe0f09802f136636035f0f4ed31c3e33a7c4\nSigned-off-by: Angel Pons \u003cth3fanbus@gmail.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/150\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "5b4fdd11dd74c7f018cb04f7a27a2badc02fe182",
      "tree": "92a54a57493ecb596a23afdb85fa61c93647c738",
      "parents": [
        "72c9e40cc83aa181dd24c810aec9d43b4c8e7cea"
      ],
      "author": {
        "name": "Nicholas Chin",
        "email": "nic.c3.14@gmail.com",
        "time": "Thu May 02 18:05:35 2024 -0600"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat May 04 13:27:41 2024 +0000"
      },
      "message": "z60_flashprog.rules: Add udev rule for CH347\n\nThis allows the CH347 programmer to be used without root permissions.\n\nChange-Id: Ica223318a2cbdfb7a328b65b68b8da0637fc22ac\nSigned-off-by: Nicholas Chin \u003cnic.c3.14@gmail.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/149\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "72c9e40cc83aa181dd24c810aec9d43b4c8e7cea",
      "tree": "9b97fac6c66effb4e63d137cd69905ecebb7b021",
      "parents": [
        "34582208ba88b6268b77e0818e7f833456f98c77"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 13:07:17 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 26 19:48:54 2024 +0000"
      },
      "message": "meson: Check for CPU families with known raw mem access\n\nSame as the Makefile does with $(DEPENDS_ON_RAW_MEM_ACCESS), we should\ntag all the programmers that require raw memory access. Otherwise, we\nmight compile these drivers for architectures that require explicit\nmemory barriers that we haven\u0027t implemented.\n\nAs there seems to be no notion of intersection in Meson, we have to make\n`cpu_families\u0027 a list of lists and check them all.\n\nChange-Id: I3bd6bd7b5cb871a506178496241bacdeb40febcf\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/131\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "34582208ba88b6268b77e0818e7f833456f98c77",
      "tree": "1ad0bd77c60fbfe57293685e0094c0bf9a9cff67",
      "parents": [
        "f2797628df35620c982946e015770e4714daad9a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 15:39:45 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 26 19:48:54 2024 +0000"
      },
      "message": "platform/meson: Port pciutils/pci.h workaround to Meson\n\nChange-Id: Idc6f442361ea3860d7ad3932ad1b72c6ff56ba45\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/130\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "f2797628df35620c982946e015770e4714daad9a",
      "tree": "489445a5d38cd6a0b90dcfef0fef213f4e546a5b",
      "parents": [
        "14da5f776a9983613394f222f9aac5d544af0af5"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 21 13:25:17 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 26 19:48:54 2024 +0000"
      },
      "message": "platform/meson: Check for libi386 on NetBSD\n\nThe 32-bit library is called libi386, not libx86. Fixes building with\nMeson on i386 NetBSD.\n\nChange-Id: Ib9e1aa16558dc24f0bf14dd573934cf5164d67e8\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/129\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "14da5f776a9983613394f222f9aac5d544af0af5",
      "tree": "3452d3903555cedf74a9db81437a282abe6a3e05",
      "parents": [
        "8ddea57689627f5f2867fd353b285793ef97e6c6"
      ],
      "author": {
        "name": "J. Neuschäfer",
        "email": "j.ne@posteo.net",
        "time": "Wed Apr 24 13:40:02 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Apr 25 20:12:14 2024 +0000"
      },
      "message": "README: Convert to Markdown\n\nMarkdown makes it easier to read the file in editors/viewers that\nhighlight the headlines.\n\nThe changes are intentionally fairly minimal, just enough to ensure good\nreadability with the automatic line-wrapping that Markdown renderers apply.\n\nChange-Id: I4cbd329829bf5599dd886a966c12e44c5d0e75f0\nSigned-off-by: J. Neuschäfer \u003cj.ne@posteo.net\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/128\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "8ddea57689627f5f2867fd353b285793ef97e6c6",
      "tree": "8ed133fb0e55848abfa9361f59ddb7b5f4298320",
      "parents": [
        "2522456a433dbe56f7ad13192d5b25b1c873c69a"
      ],
      "author": {
        "name": "J. Neuschäfer",
        "email": "j.ne@posteo.net",
        "time": "Wed Apr 24 13:38:01 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Apr 25 20:12:14 2024 +0000"
      },
      "message": "README: Document branching and release policy\n\nDue to some recent confusion while reviewing a distro packaging pull\nrequest for flashprog, I noticed that the branching policy wasn\u0027t\nexplained. This is an attempt to fix that.\n\nChange-Id: I7d776cc7499062b03cb5fb7d6bcb980670df5d04\nSigned-off-by: J. Neuschäfer \u003cj.ne@posteo.net\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/127\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "2522456a433dbe56f7ad13192d5b25b1c873c69a",
      "tree": "2ce824559ba7358334176b0698512f8d3ad3f57f",
      "parents": [
        "cbf9c1132914f0d5d3a271f910611a6364d30dd3"
      ],
      "author": {
        "name": "Maximilian Brune",
        "email": "maximilian.brune@9elements.com",
        "time": "Thu Apr 11 21:05:26 2024 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 13 10:32:29 2024 +0000"
      },
      "message": "util/list_yet_unsupported_chips.sh: Fix path\n\nChange-Id: Iecb6cf3d1f214102a243a3ffa8d0c9301263af0a\nSigned-off-by: Maximilian Brune \u003cmaximilian.brune@9elements.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/118\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "cbf9c1132914f0d5d3a271f910611a6364d30dd3",
      "tree": "149601c569f8a9534bc84db47a83c53c41fc67e4",
      "parents": [
        "823a7046d28d207a2985a52a3a95e4916ba72d4e"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 19:24:17 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 06 13:39:43 2024 +0000"
      },
      "message": "spi: Don\u0027t cross 16MiB boundaries with long writes\n\nThe 16MiB issue still bites us.  Originally, the core of flashprog never\nsent more than an erase block at once to write. Now that we write bigger\nchunks at once, after all necessary erasure, it can happen that we cross\n16MiB boundaries. This is an issue with programmer drivers that can only\nsend 3-byte addresses.  We use the extended address register with these,\nto select which 16MiB area is currently accessed. Should we try to write\nacross a 16MiB boundary, we\u0027d write with stale extended-address register\ncontents (basically wrapping around).\n\nThis once more troubles old, V1 Dediprog SF100\u0027s. Where we can send huge\nchunks at once and leave the sequencing to the programmer.  The program-\nmer, however,  is unaware of the state of the extended-address register.\nOther programmer drivers do the sequencing with  spi_write_chunked() and\nshouldn\u0027t be affected.\n\nTo settle this issue,  copy the loop logic that we already used to avoid\nthe problem for long reads.\n\nTested with Dediprog \"SF100   V:5.1.9\".\n\nChange-Id: I5b9d6779eff5224fb9981fd478dbc94262cd3262\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/115\nReviewed-by: Urja Rannikko \u003curjaman@gmail.com\u003e\n"
    },
    {
      "commit": "823a7046d28d207a2985a52a3a95e4916ba72d4e",
      "tree": "3d8e7566b73c5ed48df6dd3f9559b4b7003f1a24",
      "parents": [
        "e8463c8091a36cf6fd4d49e895caab41f23259a5"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Mar 24 18:32:58 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:33:00 2024 +0000"
      },
      "message": "dediprog: Skip warning on first attempt to read device string\n\nIt\u0027s spurious on the first attempt as older devices are supposed to fail\non the first try. Only print the error if the second attempt fails.\n\nTested with \"SF100   V:5.1.9\".\n\nChange-Id: I725df8f26e3432295a3fc521390f391c062b4e14\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/106\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "e8463c8091a36cf6fd4d49e895caab41f23259a5",
      "tree": "6b8ea2c9e97ea38daec5ec9c1523cc30f99d8088",
      "parents": [
        "38af1a19248ac3763a47691146a1031a3a4a589a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Mar 24 16:50:50 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:33:00 2024 +0000"
      },
      "message": "dediprog: Revise prefix check for given programmer id\n\nThe SF600Plus-G2 uses a new prefix `S6B\u0027 for the serial number. Refactor\nthe code to ease more prefix additions and add this one.\n\nChange-Id: I10a57446041352e391462a3bef42f570720a8d50\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/105\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "38af1a19248ac3763a47691146a1031a3a4a589a",
      "tree": "8d6b8523535e1e9e12248b18c7077cc813d2d902",
      "parents": [
        "4661e7c848efb5fc89b5b0f89c8d6b463702ae28"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Mar 24 15:04:20 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:33:00 2024 +0000"
      },
      "message": "dediprog: Revise id matching\n\nAvoid printing a redundant error message, as we already print one inside\ndediprog_read_id().  Also break early when a match is found, so we don\u0027t\nhave to repeat the clean-up code.\n\nChange-Id: I2f85432a83f1a9d1b6efe0fc9c47a36d9c4934a8\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/104\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "4661e7c848efb5fc89b5b0f89c8d6b463702ae28",
      "tree": "995fa43c284e204698b53d418575682b3f810d52",
      "parents": [
        "cdcfda2730e20e8e36a658f6c5f341f05580795f"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 28 21:57:45 2023 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "amd_spi100: Use flashprog_read_chunked() for progress reporting\n\nRead up to 64 KiB in one go to be able to report progress in between.\nOtherwise, we might read the whole flash at once, without being able\nto report progress.\n\nChange-Id: I4d06f6f5d19944fe22298a1ddfb91244fa7c2eb6\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74867\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "cdcfda2730e20e8e36a658f6c5f341f05580795f",
      "tree": "ad75d281dc0e1a4fc114d8e24f17a3b552cecdf5",
      "parents": [
        "7679b5ccf987e4999fefed6c6100a7a8f50d4350"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 29 13:29:33 2023 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "read_memmapped: Use flashprog_read_chunked() for progress reporting\n\nRead up to 64 KiB in one go to be able to report progress in between.\nOtherwise, we might read the whole flash at once, without being able\nto report progress.\n\nChange-Id: I272a53f4be6e7c5bf2811d4332688a31a0080f24\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74866\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "7679b5ccf987e4999fefed6c6100a7a8f50d4350",
      "tree": "d904cf0a8e68feb831380054ce5956cb3b96fdca",
      "parents": [
        "ca1c7fdd6bd6f61029492fb7a194bd47119e465f"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 28 21:48:53 2023 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "spi25: Replace spi_read_chunked() with more abstract version\n\nThe new flashprog_read_chunked() takes a low-level reading function as\nargument. This allows us to make use of the chunking with non-SPI read\nfunctions.\n\nChange-Id: Ica1b616e75e4e7682120928588e231c82cf4cf70\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74865\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "ca1c7fdd6bd6f61029492fb7a194bd47119e465f",
      "tree": "6e0063b18b7b8e9b3b1ddc4da95620213331efb6",
      "parents": [
        "e36e3dc90f81fc2a718e4b367eebff900af21126"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 28 21:44:41 2023 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "spi25: Normalize parameters of spi_nbyte_read()\n\nMost other reading functions have the destination buffer\nas second parameter.\n\nChange-Id: Id3f91f3d23132b0706b3b33bbf156356c9bf5ebc\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74864\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "e36e3dc90f81fc2a718e4b367eebff900af21126",
      "tree": "a410fcee48fc837ee2e0d2271bef9a5b2b92a7bb",
      "parents": [
        "522a86dbe88dd56bff3a1285284f0782e3cd179a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 28 21:23:08 2023 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "dediprog: Use default_spi_write_256\n\nThe default function already handles the chunking. However, we have\nto account for command and address bytes in `.max_data_write` to make\nuse of it.\n\nChange-Id: I738a3b8427f082f0144481b953a20f15d1813974\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74863\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "522a86dbe88dd56bff3a1285284f0782e3cd179a",
      "tree": "612b8368745f8aa3277205e9f6a4ae8613b478fc",
      "parents": [
        "806509b751e766787a8f429f00f1a04666db75b8"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Apr 28 20:59:21 2023 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "linux_spi: Use default_spi_read()/_write_256()\n\nThe default functions already handle the chunking.\n\nChange-Id: I6ed90c3eed3a3e36a560c5036704cf5ebc26f96e\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74862\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "806509b751e766787a8f429f00f1a04666db75b8",
      "tree": "7bcb191bd9f947b6c8267d8663c1cabbf3720872",
      "parents": [
        "842d678f07439e133e69fc775a848dcd66369446"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Apr 23 00:02:57 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "cli_classic: Turn progress reporting into a progress bar\n\nChange-Id: If3fb8a7877ba6aeff09193a63334e8dab0f0f827\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74732\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "842d678f07439e133e69fc775a848dcd66369446",
      "tree": "c01716fbc4220c1211749772d6a566e6d70701d7",
      "parents": [
        "aa714dd3dd7090e1fa7175f3a32a252b04817261"
      ],
      "author": {
        "name": "Richard Hughes",
        "email": "richard@hughsie.com",
        "time": "Fri Jan 15 09:48:12 2021 +0000"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "libflashrom: Return progress state to the library user\n\nProjects using libflashrom like fwupd expect the user to wait for the\noperation to complete. To avoid the user thinking the process has\n\"hung\" or \"got stuck\" report back the progress complete of the erase,\nwrite and read operations.\n\nAdd a new --progress flag to the CLI to report progress of operations.\n\nInclude a test for the dummy spi25 device.\n\nTested: ./test_build.sh; ./flashrom -p lspcon_i2c_spi:bus\u003d7 -r /dev/null --progress\n\nflashrom-stable:\n* Closer to original libflashrom API.\n* Split update_progress() into progress_start/_set/_add/_finish:\n  Simplifies progress calls scattered through the code base. We let\n  the core code in `flashprog.c` handle the total progress. Only API\n  is flashprog_progress_add().  Erase progress is completely handled\n  in `flashprog.c`. Fine grained read/write progress can be reported\n  at the chip/programmer level.\n* Add calls to all chip read/write paths and opaque programmers\n  except for read_memmapped() (which is handled in follow ups).\n* At least one wrinkle left: Erasing unaligned regions will slightly\n  overshoot total progress.\n\nChange-Id: I7197572bb7f19e3bdb2bde855d70a0f50fd3854c\nSigned-off-by: Richard Hughes \u003crichard@hughsie.com\u003e\nSigned-off-by: Daniel Campello \u003ccampello@chromium.org\u003e\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nOriginal-Reviewed-on: https://review.coreboot.org/c/flashrom/+/49643\nOriginal-Reviewed-by: Edward O\u0027Callaghan \u003cquasisec@chromium.org\u003e\nOriginal-Reviewed-by: Anastasia Klimchuk \u003caklm@chromium.org\u003e\nOriginal-Reviewed-by: Thomas Heijligen \u003csrc@posteo.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74731\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "aa714dd3dd7090e1fa7175f3a32a252b04817261",
      "tree": "a162b1e9c89739a68ec42f77b734d4291d713825",
      "parents": [
        "2eed4cf69e8e870e77acff1d9c8b192b89c8b400"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Apr 22 14:59:33 2023 +0200"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Wed Mar 27 08:32:15 2024 +0000"
      },
      "message": "flashprog.c: Let select_erase_functions() return byte count\n\nHaving the total byte count that will be erased helps to calculate\nan overall progress state.\n\nChange-Id: Ib4c326d1c98e97325b6ffd67363bbba4f9194678\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/74730\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "2eed4cf69e8e870e77acff1d9c8b192b89c8b400",
      "tree": "919fe890d86d365b2914b3bd940242c2858c53ea",
      "parents": [
        "821a085cb30897aae4103c2d19c5dab10daeecaa"
      ],
      "author": {
        "name": "Funkeleinhorn",
        "email": "git@funkeleinhorn.com",
        "time": "Sun Mar 24 20:58:42 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Tue Mar 26 20:46:04 2024 +0000"
      },
      "message": "serprog: Add SPI Mode and CS Mode commands\n\nThis commit adds two new commands to the serprog protocol which allow\nmore fine grained control over the SPI bus. This enables more\napplications over serprog like e.g. flashing AVR microcontrollers.\nThis can be tried with my forks of pico-serprog:\n\nhttps://github.com/funkeleinhorn/pico-serprog/tree/spimode\n\nand avrdude:\n\nhttps://github.com/funkeleinhorn/avrgirl/tree/serprog-programmer\n\nI announced this change in flashrom and flashprog IRC channels and got\noverall positive feedback in the flashprog channel. The same changes\nhave been sent to flashrom to prevent diverging specs.\n\nChange-Id: Ib2d2e7ca343f6433028bdc00390ba0980cca98a1\nSigned-off-by: Funkeleinhorn \u003cgit@funkeleinhorn.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/107\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "821a085cb30897aae4103c2d19c5dab10daeecaa",
      "tree": "a8e858935021b4bd2a8bfb97800f0e1155775545",
      "parents": [
        "274e655e5cabb672845f1858aba4ed877b95d444"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Mar 24 13:34:51 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:54:06 2024 +0000"
      },
      "message": "dediprog: Implement id reading for SF600 and later\n\nFor the SF600, we simply use the more canonical read EEPROM command.\nNewer devices use a special command that allows to read the id over\nthe bulk endpoint.  The exact meaning of the magic command bytes is\nunknown at this time.\n\nReading from the bulk endpoint times out on about every other attempt\nto fetch the id, unless it\u0027s queried twice in a row. `dpcmd\u0027 comments\nthat this is necessary. And traces also show that the Windows applica-\ntion runs it twice too (even if not in a row).  Tests have shown that\na working read takes up to 5ms. So we lose 10ms tops, which seems ok.\n\nAnother observation when only querying the id once (or only repeating\nthe read when it failed) is that the bulk-in endpoint only keeps wor-\nking during the current flashprog run. Future runs fail unless the id\nis queried again.\n\nTested with \"SF600PG2. V:01.01.012 HW:01.00\", \"SF100   V:5.1.9\".\n\nChange-Id: I8056d936d41a24824c089e80d6dfed23ad5e0d1c\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/103\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "274e655e5cabb672845f1858aba4ed877b95d444",
      "tree": "7de1eaff0ec549a408e1cee3ff7a73781534fc10",
      "parents": [
        "0057822c6350f415a4b8d4563b0fef6d136419d4"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Mar 24 12:34:57 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:54:06 2024 +0000"
      },
      "message": "dediprog: Read device string early\n\nTo select one of multiple Dediprogs by `id\u0027, we need to know early what\ntype of device we found, so we can select the proper way to read its id.\nOTOH, when a specific device is selected but incompatible (e.g. unknown\nfirmware version),  we still want to provide correct console output. If\nwe split the device-type detection from further processing, we can tell\nfirst that a matching device was found and still bail out later in case\nthe device turns out to be incompatible.\n\nTested with \"SF600PG2. V:01.01.012 HW:01.00\", \"SF100   V:5.1.9\".\n\nChange-Id: I820982d61831e6cd6a830f915dc745a1adea3776\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/102\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "0057822c6350f415a4b8d4563b0fef6d136419d4",
      "tree": "044ffe7fbe963fca4b57e049d486813f35b861ad",
      "parents": [
        "fb176d28fe456e7dad471594f5c7f58136e36b1d"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 02 14:00:53 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:53:29 2024 +0000"
      },
      "message": "dediprog: Add protocol detection for SF700 \u0026 SF600Plus-G2\n\nThe short-lived SF700 was not tested but is treated the same as an\nSF600Plus-G2 by `dpcmd\u0027.  Both programmers have their own firmware\nversioning:  For the SF700, only clues about firmware versions 4.x\nwere found. The SF600Plus-G2 seems to start anew from version 1.x.\n\nGiven that the SF700 was introduced in 2019 [1], after support for\nthe current protocol was added to flashrom in commit f73f8a732f8fd\n(dediprog: implement command spec for firmware \u003e\u003d 7.2.30), it most\nlikely never supported any older protocol version.\n\nTested with \"SF600PG2. V:01.01.012 HW:01.00\", \"V:01.01.006 HW:01.00\".\n\n[1] https://www.dediprog.com/news/show?id\u003d196\n\nChange-Id: I8d2c9612e422cedbf91b42432b1832abaaf95c62\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/94\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "fb176d28fe456e7dad471594f5c7f58136e36b1d",
      "tree": "774ac2b97d223a5f4f63582cc71621f2ca51824a",
      "parents": [
        "0ab5c3d6abc7700019e63de0e187b462a4e34203"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.huber@secunet.com",
        "time": "Mon Mar 25 15:55:13 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:53:29 2024 +0000"
      },
      "message": "dediprog: Use more general 4BA write mode for newer protocols\n\nWe used to send the specific WRITE_MODE_4B_ADDR_256B_PAGE_PGM_0x12\ncommand combined with the 0x12 JEDEC SPI opcode. This doesn\u0027t work\non newer programmers anymore,  and it turns out that `dpcmd\u0027 pairs\nit only in special cases with an SF100.\n\n`dpcmd\u0027 suggests that for SF600 and newer,  the more generic write\nmode (WRITE_MODE_4B_ADDR_256B_PAGE_PGM) works with the 0x12 opcode\ntoo. So using that for protocal version 3 seems safe.\n\nTested with \"SF600PG2. V:01.01.012 HW:01.00\".\n\nChange-Id: I8a4a94b574c1bf846173fff89ee9ef65c02d2d33\nSigned-off-by: Nico Huber \u003cnico.huber@secunet.com\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/108\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "0ab5c3d6abc7700019e63de0e187b462a4e34203",
      "tree": "63c8d2cbe1fd8382689ddd3b4cc65db4127b1a37",
      "parents": [
        "bdef5c2fc41cc564a5c5716cdf423b06a8bcc45d"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 02 13:53:16 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:53:29 2024 +0000"
      },
      "message": "dediprog: Split device type and version parsing\n\nParse the device type with a separate sscanf() call. This will make\nsupport for newer programmers easier that are identified by more than\na simple number.\n\nChange-Id: I2bb4cb3f88b2e18092458508eb872a668887cf3a\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/93\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "bdef5c2fc41cc564a5c5716cdf423b06a8bcc45d",
      "tree": "2ab52862773f7468752e50e3522f84f1f33f66d0",
      "parents": [
        "5262e29da8852cda587e7b240bbefea408c9f67a"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 02 13:51:39 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:53:29 2024 +0000"
      },
      "message": "dediprog: Use unsigned conversions to parse device string\n\nWe do neither expect nor support negative device or version numbers.\nThis also spares us a cast.\n\nChange-Id: I77f56ea0531a7da601362716fe6f937acf312b52\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/92\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "5262e29da8852cda587e7b240bbefea408c9f67a",
      "tree": "927b97c5d3e58b64dbfd24e4bd72bb702e609147",
      "parents": [
        "e76e21f92e9b0885e2892c414832334467fc7fa7"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 02 13:21:25 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:53:29 2024 +0000"
      },
      "message": "dediprog: Try to request 32B device string (instead of 16B)\n\nIt looks like `dpcmd\u0027 first tries 26B, then 32B. However, older devices\nreturn only 16B.  We get a short, but otherwise valid transfer, so only\ntry once with 32B and allow any string length between 16B and 32B.\n\nThis allows to read the full version string from newer programmers. It\nincludes a hardware version now, probably since the first SF600.\n\nTested with \"SF600PG2. V:01.01.012 HW:01.00\".\nTested with \"SF100   V:5.1.9\".\n\nChange-Id: Id137e4cfe3e1dbffb71ab4b16482822661117e39\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/91\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "e76e21f92e9b0885e2892c414832334467fc7fa7",
      "tree": "a45f57aa8c6ccc2c9f9e546fa0ac31900c2a2555",
      "parents": [
        "5a09d1e1c10750dce2618ef847d54c0cd96e3cae"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Feb 29 23:33:35 2024 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Mon Mar 25 21:53:29 2024 +0000"
      },
      "message": "dediprog: Get rid of some unnecessary hex constants\n\nChange-Id: Id9f3ffb44b1cda04ca2e8e89b5bf1fc8d0ab84e6\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/90\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "5a09d1e1c10750dce2618ef847d54c0cd96e3cae",
      "tree": "bd7777531a7bab3726058d38ddaa2f5e94bc8622",
      "parents": [
        "03ad4a42545591863f3f01be31e15d221cf29c75"
      ],
      "author": {
        "name": "Brian Norris",
        "email": "briannorris@chromium.org",
        "time": "Thu Feb 29 16:29:51 2024 -0800"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 13:21:35 2024 +0000"
      },
      "message": "udelay: Lower the sleep vs delay threshold\n\nBy default, we busy-loop (a.k.a., \"delay\") for most delay values, and\nonly allow sleeping for large delays. But busy-looping is expensive, as\nit wastes CPU cycles.\n\nIn a simple program that runs a bunch of samples of [1] over 1000\nsamples, I find that for 0.1 s (100000 us):\n\n 64x2 AMD CPU (CONFIG_HZ\u003d250 / CONFIG_NO_HZ_FULL\u003dy):\n   min diff: 60 us\n   max diff: 831 us\n   mean diff: 135 us\n\n 4+2 Mediatek MT8183 CPU (CONFIG_HZ\u003d1000 / CONFIG_NO_HZ_IDLE\u003dy /\n                          sysctl kernel.timer_highres\u003d1):\n   min diff: 70 us\n   max diff: 1556 us\n   mean diff: 146 us\n\n 4+2 Mediatek MT8183 CPU (CONFIG_HZ\u003d1000 / CONFIG_NO_HZ_IDLE\u003dy /\n                          sysctl kernel.timer_highres\u003d0):\n   min diff: 94 us\n   max diff: 7222 us\n   mean diff: 1201 us\n\ni.e., maximum 1.5% error, typically ~0.1% error with high resolution\ntimers. Max 7% error, typical 1% error with low resolution timers.\n\nThis seems reasonable.\n\n[1] Stripped / pseudocode:\n\n  clock_gettime(CLOCK_MONOTONIC, before);\n  nanosleep({ .tv_nsec \u003d usecs * 1000 }, NULL);\n  clock_gettime(CLOCK_MONOTONIC, after);\n  diff \u003d abs((after - before) / 1000 - usecs));\n\nChange-Id: Ifd4821c66c5564f7c975c08769a6742f645e9be0\nSigned-off-by: Brian Norris \u003cbriannorris@chromium.org\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/97\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "03ad4a42545591863f3f01be31e15d221cf29c75",
      "tree": "efb04af6d76599817ec93404fe2f48e39592b23e",
      "parents": [
        "211c6ec6011f554a5a9aeacdf0d2c410b343bb2a"
      ],
      "author": {
        "name": "Brian Norris",
        "email": "briannorris@chromium.org",
        "time": "Tue Feb 27 13:01:23 2024 -0800"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 13:21:35 2024 +0000"
      },
      "message": "linux_mtd: Provide no-op delay implementation\n\nFlashrom has several magic programmer_delay() calls scattered\nthroughout its codebase (see cli_classic.s/main() and\nflashrom.c/flashrom_image_write(), at least). These delays are\nsuperfluous for the linux_mtd programmer, because it\u0027s an opaque\nprogrammer in which all protocol details are handled by the kernel\ndriver.\n\nStub out the delay function, so we don\u0027t waste up to 1.1 seconds of\nneedless delay time, depending on the operation and CLI vs libflashrom\nusage.\n\nChange-Id: I3ac69d3fd7cfc689c5b32c130d044516ed846c29\nSigned-off-by: Brian Norris \u003cbriannorris@chromium.org\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/96\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n"
    },
    {
      "commit": "211c6ec6011f554a5a9aeacdf0d2c410b343bb2a",
      "tree": "98aa11ff12be1c2dc721115c06584ea11c5ddee9",
      "parents": [
        "383b7fe197a781792d4eb42abe1e84551c2b5d0b"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Feb 12 01:05:47 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:50:41 2024 +0000"
      },
      "message": "serprog: Refine flushing before synchronization\n\nWe used to wait for 1s before flushing buffers of the tty layer.\nHowever, if the programmer had more data to send than would fit\ninto these buffers, it would continue to send after flushing the\nlatter. So we try to read all the data instead. The added loop\nreads up to 512KiB and stops when no data is received for 10ms.\nOverall, it should time out after at most 10s.\n\nTests show that an stm32-vserprog can be re-synchronized after\ninterrupted reads, where the old implementation failed. In case\nsynchronization is necessary, it also succeeds without notice-\nable delay.\n\nChange-Id: Iaa5dfceac0629381ca0924bb59b988525bacba3f\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72996\nReviewed-by: Riku Viitanen \u003criku.viitanen@protonmail.com\u003e\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\n"
    },
    {
      "commit": "383b7fe197a781792d4eb42abe1e84551c2b5d0b",
      "tree": "701fd0785f35754c18bde9421864bf94513ccc1b",
      "parents": [
        "d7318eabdc92bbe4e12838528d40f7f928511b69"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Feb 12 00:38:55 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:50:41 2024 +0000"
      },
      "message": "serprog: Test synchronicity before trying to synchronize\n\nRun one test round ahead of trying to synchronize. If the test\nsucceeds, it saves us the 1s unconditional delay on startup.\n\nChange-Id: I5b727d299cac0cbeadab39af3975dfd8019db8d7\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72995\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nReviewed-by: Riku Viitanen \u003criku.viitanen@protonmail.com\u003e\n"
    },
    {
      "commit": "d7318eabdc92bbe4e12838528d40f7f928511b69",
      "tree": "17a8e0d36c17d35d383a3f8a21b72097e6821aa1",
      "parents": [
        "9a11cbf21a5078bcdb8db7584c44a9ee17020db4"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sun Feb 12 00:30:31 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:50:41 2024 +0000"
      },
      "message": "serprog: Move synchronicity test into separate function\n\nExtract the sequence to test for synchronicity into a new\nfunction sp_test_sync().\n\nChange-Id: I9e4aac5b8ac524804a3a8989c2794cdfaacb7b32\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72994\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nReviewed-by: Riku Viitanen \u003criku.viitanen@protonmail.com\u003e\n"
    },
    {
      "commit": "9a11cbf21a5078bcdb8db7584c44a9ee17020db4",
      "tree": "e67a9eadfdb7a71f81df36c7e97180474a8c59df",
      "parents": [
        "aabb3e0ff54e87c0136c91f105e506ed19184cc6"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jan 13 01:19:07 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:40:04 2024 +0000"
      },
      "message": "Let the flash context directly point to the used master\n\nWe used to have a pointer to a full `registered_master` struct in\nour flash context. Beside the used master, this contained a bit\nmask of supported buses. Oddly convenient, this bit mask invited\nto bypass the chip driver and break the abstraction. It allowed\nto place bus-specific details virtually anywhere in flashprog,\nmaking it harder to find a good place for them.\n\nSo, get rid of the `buses_supported` bit mask by pointing directly\nto the master. Only the chip driver will implicitly know which type\nof master is used.\n\nChange-Id: I9ce13d8df0e7ccc67519d888dd9cb2e2ff8d6682\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72533\n"
    },
    {
      "commit": "aabb3e0ff54e87c0136c91f105e506ed19184cc6",
      "tree": "d53c2df274e9550b1f251a94b80add2d7285c5c4",
      "parents": [
        "89569d60e3aeeec651496b2e7a2e6064d782ab3b"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Fri Jan 13 00:22:30 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:30:24 2024 +0000"
      },
      "message": "writeprotect: Hook wp functions into the chip driver\n\nChange-Id: I17a06210ec329aba337cf459d581463827182108\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72532\n"
    },
    {
      "commit": "89569d60e3aeeec651496b2e7a2e6064d782ab3b",
      "tree": "bf0c3951886de60086d32ff6e1a850adad926da6",
      "parents": [
        "929d2e1b17a448d3352dbecb6a620ee0c1e65a58"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Jan 12 23:31:40 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:30:24 2024 +0000"
      },
      "message": "memory_mapped: Reduce `decode_sizes` to a single `max_rom_decode`\n\nWe used to store the maximum decode size, i.e. the maximum memory-mapped\nrange of the flash chip, per bus type (Parallel, LPC, FWH, SPI). There\nwas no programmer in the tree that really made use of it, though:\n* The chipset drivers usually focus on a single bus type. And even if\n  they advertise the whole default set (PAR, LPC, FWH), they only pro-\n  vide a maximum decode size for one of them. The latter is probably\n  wrong, should really more than one bus type be supported.\n* PCI and external programmers all support only a single bus type, with\n  the exception of `serprog` which doesn\u0027t set a maximum decode size.\n\nWhat made the distinction even less useful is that for some chips that\nsupport multiple bus types, i.e. LPC+FWH, we can\u0027t even detect which\ntype it is. The existing code around this also only tried to provide\nthe best possible warning message at the expense of breaking the pro-\ngrammer abstraction.\n\nHence, unify the set of sizes into a single `max_rom_decode` property.\nWe store it inside the `registered_master` struct right away, to avoid\nany more use of globals.\n\nChange-Id: I2aaea18d5b4255eb843a625b016ee74bb145ed85\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72531\n"
    },
    {
      "commit": "929d2e1b17a448d3352dbecb6a620ee0c1e65a58",
      "tree": "dcbad4698ce5741a1080fc7ba89d4bd5c5804417",
      "parents": [
        "7c717c36c533f56ddc7fbac2ff944870fa0249f8"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Jan 12 00:47:05 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:30:24 2024 +0000"
      },
      "message": "internal: Pass programmer context down into chipset enables\n\nChipset enables potentially need access to programmer data, e.g.\nto process parameters, register masters etc.\n\nChange-Id: Iad211ff97e92d1973f981156bfa3154d1ba71d45\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72528\n"
    },
    {
      "commit": "7c717c36c533f56ddc7fbac2ff944870fa0249f8",
      "tree": "b91afaf1498cde1de33e7222632ec05999bf0b73",
      "parents": [
        "e3a26888e14d16592c2c79d1516828d3d32961a4"
      ],
      "author": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Thu Jan 12 00:28:15 2023 +0100"
      },
      "committer": {
        "name": "Nico Huber",
        "email": "nico.h@gmx.de",
        "time": "Sat Mar 09 10:30:24 2024 +0000"
      },
      "message": "internal: Pass programmer context down into board enables\n\nBoard enables potentially need access to programmer data, e.g. to\nprocess parameters, register masters etc.\n\nChange-Id: I1531a6e1be9866adc5dce74c6f62bbbeae1bd274\nSigned-off-by: Nico Huber \u003cnico.h@gmx.de\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/72527\n"
    }
  ],
  "next": "e3a26888e14d16592c2c79d1516828d3d32961a4"
}
