Move to updated aspeed ddk

Transition from buffer mode to DMA

Remove destination insert

Cache and DMA buffer setup

Enable DMA for I2C operations

- Shrank the
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index c0a9740..0feb464 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -2563,8 +2563,8 @@
         "recordedFileInputs": {
           "@@//third_party/crates_io/Cargo.lock": "476c8b233fa2b269018dbcb33a67157983dd2456398bf5e2742d2b8721390bed",
           "@@//third_party/crates_io/Cargo.toml": "1e902f5b20bf6ad09e1660171a2247e00570a88181bec3ecb58416343c0c2739",
-          "@@//third_party/crates_io/crates_no_std/Cargo.lock": "88107be7592e1ff465937da221b1d1b53d8740aa8dcaf277b9df0c50bb448c0c",
-          "@@//third_party/crates_io/crates_no_std/Cargo.toml": "28b572b320a9494107859d2fa2389f5f10bbf9903aadfbec98bb62d1047c2111",
+          "@@//third_party/crates_io/crates_no_std/Cargo.lock": "2c124371bb611b76a5f16b8a35851807a30756f339581ba8625df72d7d1f302f",
+          "@@//third_party/crates_io/crates_no_std/Cargo.toml": "c0d7bb3bac37b91436311ed9754b2b8bb293a9723ca0e0ffc8d4a5bd1e3dae2b",
           "@@pigweed+//third_party/crates_io/crates_no_std/Cargo.lock": "d38da5fa5f942b59a8017730285afe69aaf6f741b6171f361d66202de3473bc2",
           "@@pigweed+//third_party/crates_io/crates_no_std/Cargo.toml": "00e4a621a4a49d1b269bb2e688d8b5bbabb8700eb7b583ccaa20c36a60aebf98",
           "@@pigweed+//third_party/crates_io/crates_std/Cargo.lock": "13ffbc71abd52f9c79d69ce7101aca75faddaefb314ab8b112a623ab0ea81540",
@@ -3942,7 +3942,7 @@
               "contents": {
                 "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n    [\n        \"cargo-bazel.json\",\n        \"crates.bzl\",\n        \"defs.bzl\",\n    ] + glob(\n        allow_empty = True,\n        include = [\"*.bazel\"],\n    ),\n)\n\nfilegroup(\n    name = \"srcs\",\n    srcs = glob(\n        allow_empty = True,\n        include = [\n            \"*.bazel\",\n            \"*.bzl\",\n        ],\n    ),\n)\n\n# Workspace Member Dependencies\nalias(\n    name = \"aes-0.8.4\",\n    actual = \"@oot_crates_no_std__aes-0.8.4//:aes\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes\",\n    actual = \"@oot_crates_no_std__aes-0.8.4//:aes\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes-gcm-0.10.3\",\n    actual = \"@oot_crates_no_std__aes-gcm-0.10.3//:aes_gcm\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aes-gcm\",\n    actual = \"@oot_crates_no_std__aes-gcm-0.10.3//:aes_gcm\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aspeed-ddk-0.1.0\",\n    actual = \"@oot_crates_no_std__aspeed-ddk-0.1.0//:aspeed_ddk\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"aspeed-ddk\",\n    actual = \"@oot_crates_no_std__aspeed-ddk-0.1.0//:aspeed_ddk\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ast1060-pac-0.1.0\",\n    actual = \"@oot_crates_no_std__ast1060-pac-0.1.0//:ast1060_pac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ast1060-pac\",\n    actual = \"@oot_crates_no_std__ast1060-pac-0.1.0//:ast1060_pac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cipher-0.4.4\",\n    actual = \"@oot_crates_no_std__cipher-0.4.4//:cipher\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cipher\",\n    actual = \"@oot_crates_no_std__cipher-0.4.4//:cipher\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-0.7.7\",\n    actual = \"@oot_crates_no_std__cortex-m-0.7.7//:cortex_m\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m\",\n    actual = \"@oot_crates_no_std__cortex-m-0.7.7//:cortex_m\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-rt-0.7.5\",\n    actual = \"@oot_crates_no_std__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-rt\",\n    actual = \"@oot_crates_no_std__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-semihosting-0.5.0\",\n    actual = \"@oot_crates_no_std__cortex-m-semihosting-0.5.0//:cortex_m_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"cortex-m-semihosting\",\n    actual = \"@oot_crates_no_std__cortex-m-semihosting-0.5.0//:cortex_m_semihosting\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ctr-0.9.2\",\n    actual = \"@oot_crates_no_std__ctr-0.9.2//:ctr\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ctr\",\n    actual = \"@oot_crates_no_std__ctr-0.9.2//:ctr\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ecdsa-0.16.9\",\n    actual = \"@oot_crates_no_std__ecdsa-0.16.9//:ecdsa\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"ecdsa\",\n    actual = \"@oot_crates_no_std__ecdsa-0.16.9//:ecdsa\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal-1.0.0\",\n    actual = \"@oot_crates_no_std__embedded-hal-1.0.0//:embedded_hal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-hal\",\n    actual = \"@oot_crates_no_std__embedded-hal-1.0.0//:embedded_hal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-io-0.6.1\",\n    actual = \"@oot_crates_no_std__embedded-io-0.6.1//:embedded_io\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"embedded-io\",\n    actual = \"@oot_crates_no_std__embedded-io-0.6.1//:embedded_io\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"fugit-0.3.9\",\n    actual = \"@oot_crates_no_std__fugit-0.3.9//:fugit\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"fugit\",\n    actual = \"@oot_crates_no_std__fugit-0.3.9//:fugit\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"getrandom-0.2.17\",\n    actual = \"@oot_crates_no_std__getrandom-0.2.17//:getrandom\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"getrandom\",\n    actual = \"@oot_crates_no_std__getrandom-0.2.17//:getrandom\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"heapless-0.8.0\",\n    actual = \"@oot_crates_no_std__heapless-0.8.0//:heapless\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"heapless\",\n    actual = \"@oot_crates_no_std__heapless-0.8.0//:heapless\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-literal-0.4.1\",\n    actual = \"@oot_crates_no_std__hex-literal-0.4.1//:hex_literal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hex-literal\",\n    actual = \"@oot_crates_no_std__hex-literal-0.4.1//:hex_literal\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hmac-0.12.1\",\n    actual = \"@oot_crates_no_std__hmac-0.12.1//:hmac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"hmac\",\n    actual = \"@oot_crates_no_std__hmac-0.12.1//:hmac\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-0.2.0\",\n    actual = \"@oot_crates_no_std__mctp-0.2.0//:mctp\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp\",\n    actual = \"@oot_crates_no_std__mctp-0.2.0//:mctp\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-lib-0.1.0\",\n    actual = \"@oot_crates_no_std__mctp-lib-0.1.0//:mctp_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"mctp-lib\",\n    actual = \"@oot_crates_no_std__mctp-lib-0.1.0//:mctp_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nb-1.1.0\",\n    actual = \"@oot_crates_no_std__nb-1.1.0//:nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"nb\",\n    actual = \"@oot_crates_no_std__nb-1.1.0//:nb\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"openprot-hal-blocking-0.1.0\",\n    actual = \"@oot_crates_no_std__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"openprot-hal-blocking\",\n    actual = \"@oot_crates_no_std__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p256-0.13.2\",\n    actual = \"@oot_crates_no_std__p256-0.13.2//:p256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p256\",\n    actual = \"@oot_crates_no_std__p256-0.13.2//:p256\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p384-0.13.1\",\n    actual = \"@oot_crates_no_std__p384-0.13.1//:p384\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"p384\",\n    actual = \"@oot_crates_no_std__p384-0.13.1//:p384\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proposed-traits-0.1.0\",\n    actual = \"@oot_crates_no_std__proposed-traits-0.1.0//:proposed_traits\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"proposed-traits\",\n    actual = \"@oot_crates_no_std__proposed-traits-0.1.0//:proposed_traits\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_chacha-0.3.1\",\n    actual = \"@oot_crates_no_std__rand_chacha-0.3.1//:rand_chacha\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_chacha\",\n    actual = \"@oot_crates_no_std__rand_chacha-0.3.1//:rand_chacha\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_core-0.6.4\",\n    actual = \"@oot_crates_no_std__rand_core-0.6.4//:rand_core\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"rand_core\",\n    actual = \"@oot_crates_no_std__rand_core-0.6.4//:rand_core\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha2-0.10.9\",\n    actual = \"@oot_crates_no_std__sha2-0.10.9//:sha2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"sha2\",\n    actual = \"@oot_crates_no_std__sha2-0.10.9//:sha2\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"spdm-lib-0.1.0\",\n    actual = \"@oot_crates_no_std__spdm-lib-0.1.0//:spdm_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"spdm-lib\",\n    actual = \"@oot_crates_no_std__spdm-lib-0.1.0//:spdm_lib\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zerocopy-0.8.47\",\n    actual = \"@oot_crates_no_std__zerocopy-0.8.47//:zerocopy\",\n    tags = [\"manual\"],\n)\n\nalias(\n    name = \"zerocopy\",\n    actual = \"@oot_crates_no_std__zerocopy-0.8.47//:zerocopy\",\n    tags = [\"manual\"],\n)\n",
                 "alias_rules.bzl": "\"\"\"Alias that transitions its target to `compilation_mode=opt`.  Use `transition_alias=\"opt\"` to enable.\"\"\"\n\nload(\"@rules_cc//cc:defs.bzl\", \"CcInfo\")\nload(\"@rules_rust//rust:rust_common.bzl\", \"COMMON_PROVIDERS\")\n\ndef _transition_alias_impl(ctx):\n    # `ctx.attr.actual` is a list of 1 item due to the transition\n    providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]\n    if CcInfo in ctx.attr.actual[0]:\n        providers.append(ctx.attr.actual[0][CcInfo])\n    return providers\n\ndef _change_compilation_mode(compilation_mode):\n    def _change_compilation_mode_impl(_settings, _attr):\n        return {\n            \"//command_line_option:compilation_mode\": compilation_mode,\n        }\n\n    return transition(\n        implementation = _change_compilation_mode_impl,\n        inputs = [],\n        outputs = [\n            \"//command_line_option:compilation_mode\",\n        ],\n    )\n\ndef _transition_alias_rule(compilation_mode):\n    return rule(\n        implementation = _transition_alias_impl,\n        provides = COMMON_PROVIDERS,\n        attrs = {\n            \"actual\": attr.label(\n                mandatory = True,\n                doc = \"`rust_library()` target to transition to `compilation_mode=opt`.\",\n                providers = COMMON_PROVIDERS,\n                cfg = _change_compilation_mode(compilation_mode),\n            ),\n            \"_allowlist_function_transition\": attr.label(\n                default = \"@bazel_tools//tools/allowlists/function_transition_allowlist\",\n            ),\n        },\n        doc = \"Transitions a Rust library crate to the `compilation_mode=opt`.\",\n    )\n\ntransition_alias_dbg = _transition_alias_rule(\"dbg\")\ntransition_alias_fastbuild = _transition_alias_rule(\"fastbuild\")\ntransition_alias_opt = _transition_alias_rule(\"opt\")\n",
-                "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n    \"\"\"Flatten a list of dependency maps into one dictionary.\n\n    Dependency maps have the following structure:\n\n    ```python\n    DEPENDENCIES_MAP = {\n        # The first key in the map is a Bazel package\n        # name of the workspace this file is defined in.\n        \"workspace_member_package\": {\n\n            # Not all dependencies are supported for all platforms.\n            # the condition key is the condition required to be true\n            # on the host platform.\n            \"condition\": {\n\n                # An alias to a crate target.     # The label of the crate target the\n                # Aliases are only crate names.   # package name refers to.\n                \"package_name\":                   \"@full//:label\",\n            }\n        }\n    }\n    ```\n\n    Args:\n        all_dependency_maps (list): A list of dicts as described above\n\n    Returns:\n        dict: A dictionary as described above\n    \"\"\"\n    dependencies = {}\n\n    for workspace_deps_map in all_dependency_maps:\n        for pkg_name, conditional_deps_map in workspace_deps_map.items():\n            if pkg_name not in dependencies:\n                non_frozen_map = dict()\n                for key, values in conditional_deps_map.items():\n                    non_frozen_map.update({key: dict(values.items())})\n                dependencies.setdefault(pkg_name, non_frozen_map)\n                continue\n\n            for condition, deps_map in conditional_deps_map.items():\n                # If the condition has not been recorded, do so and continue\n                if condition not in dependencies[pkg_name]:\n                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n                    continue\n\n                # Alert on any miss-matched dependencies\n                inconsistent_entries = []\n                for crate_name, crate_label in deps_map.items():\n                    existing = dependencies[pkg_name][condition].get(crate_name)\n                    if existing and existing != crate_label:\n                        inconsistent_entries.append((crate_name, existing, crate_label))\n                    dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n    return dependencies\n\ndef crate_deps(deps, package_name = None):\n    \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n    Args:\n        deps (list): The desired list of crate targets.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()`.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if not deps:\n        return []\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Join both sets of dependencies\n    dependencies = _flatten_dependency_maps([\n        _NORMAL_DEPENDENCIES,\n        _NORMAL_DEV_DEPENDENCIES,\n        _PROC_MACRO_DEPENDENCIES,\n        _PROC_MACRO_DEV_DEPENDENCIES,\n        _BUILD_DEPENDENCIES,\n        _BUILD_PROC_MACRO_DEPENDENCIES,\n    ]).pop(package_name, {})\n\n    # Combine all conditional packages so we can easily index over a flat list\n    # TODO: Perhaps this should actually return select statements and maintain\n    # the conditionals of the dependencies\n    flat_deps = {}\n    for deps_set in dependencies.values():\n        for crate_name, crate_label in deps_set.items():\n            flat_deps.update({crate_name: crate_label})\n\n    missing_crates = []\n    crate_targets = []\n    for crate_target in deps:\n        if crate_target not in flat_deps:\n            missing_crates.append(crate_target)\n        else:\n            crate_targets.append(flat_deps[crate_target])\n\n    if missing_crates:\n        fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n            missing_crates,\n            package_name,\n            dependencies,\n        ))\n\n    return crate_targets\n\ndef all_crate_deps(\n        normal = False, \n        normal_dev = False, \n        proc_macro = False, \n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n    for the package where this macro is called.\n\n    If no parameters are set, all normal dependencies are returned. Setting any one flag will\n    otherwise impact the contents of the returned list.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_dependency_maps = []\n    if normal:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n    if normal_dev:\n        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n    if proc_macro:\n        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n    if proc_macro_dev:\n        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n    if build:\n        all_dependency_maps.append(_BUILD_DEPENDENCIES)\n    if build_proc_macro:\n        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n    # Default to always using normal dependencies\n    if not all_dependency_maps:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n    if not dependencies:\n        if dependencies == None:\n            fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n        else:\n            return []\n\n    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n    for condition, deps in dependencies.items():\n        crate_deps += selects.with_or({\n            tuple(_CONDITIONS[condition]): deps.values(),\n            \"//conditions:default\": [],\n        })\n\n    return crate_deps\n\ndef aliases(\n        normal = False,\n        normal_dev = False,\n        proc_macro = False,\n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Produces a map of Crate alias names to their original label\n\n    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n    Setting any one flag will otherwise determine the contents of the returned dict.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        dict: The aliases of all associated packages\n    \"\"\"\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_aliases_maps = []\n    if normal:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n    if normal_dev:\n        all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n    if proc_macro:\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n    if proc_macro_dev:\n        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n    if build:\n        all_aliases_maps.append(_BUILD_ALIASES)\n    if build_proc_macro:\n        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n    # Default to always using normal aliases\n    if not all_aliases_maps:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n    if not aliases:\n        return dict()\n\n    common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n    # If there are only common items in the dictionary, immediately return them\n    if not len(aliases.keys()) == 1:\n        return dict(common_items)\n\n    # Build a single select statement where each conditional has accounted for the\n    # common set of aliases.\n    crate_aliases = {\"//conditions:default\": dict(common_items)}\n    for condition, deps in aliases.items():\n        condition_triples = _CONDITIONS[condition]\n        for triple in condition_triples:\n            if triple in crate_aliases:\n                crate_aliases[triple].update(deps)\n            else:\n                crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n    return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n        _COMMON_CONDITION: {\n            \"aes\": Label(\"@oot_crates_no_std//:aes-0.8.4\"),\n            \"aes-gcm\": Label(\"@oot_crates_no_std//:aes-gcm-0.10.3\"),\n            \"aspeed-ddk\": Label(\"@oot_crates_no_std//:aspeed-ddk-0.1.0\"),\n            \"ast1060-pac\": Label(\"@oot_crates_no_std//:ast1060-pac-0.1.0\"),\n            \"cipher\": Label(\"@oot_crates_no_std//:cipher-0.4.4\"),\n            \"cortex-m\": Label(\"@oot_crates_no_std//:cortex-m-0.7.7\"),\n            \"cortex-m-rt\": Label(\"@oot_crates_no_std//:cortex-m-rt-0.7.5\"),\n            \"cortex-m-semihosting\": Label(\"@oot_crates_no_std//:cortex-m-semihosting-0.5.0\"),\n            \"ctr\": Label(\"@oot_crates_no_std//:ctr-0.9.2\"),\n            \"ecdsa\": Label(\"@oot_crates_no_std//:ecdsa-0.16.9\"),\n            \"embedded-hal\": Label(\"@oot_crates_no_std//:embedded-hal-1.0.0\"),\n            \"embedded-io\": Label(\"@oot_crates_no_std//:embedded-io-0.6.1\"),\n            \"fugit\": Label(\"@oot_crates_no_std//:fugit-0.3.9\"),\n            \"getrandom\": Label(\"@oot_crates_no_std//:getrandom-0.2.17\"),\n            \"heapless\": Label(\"@oot_crates_no_std//:heapless-0.8.0\"),\n            \"hex-literal\": Label(\"@oot_crates_no_std//:hex-literal-0.4.1\"),\n            \"hmac\": Label(\"@oot_crates_no_std//:hmac-0.12.1\"),\n            \"mctp\": Label(\"@oot_crates_no_std//:mctp-0.2.0\"),\n            \"mctp-lib\": Label(\"@oot_crates_no_std//:mctp-lib-0.1.0\"),\n            \"nb\": Label(\"@oot_crates_no_std//:nb-1.1.0\"),\n            \"openprot-hal-blocking\": Label(\"@oot_crates_no_std//:openprot-hal-blocking-0.1.0\"),\n            \"p256\": Label(\"@oot_crates_no_std//:p256-0.13.2\"),\n            \"p384\": Label(\"@oot_crates_no_std//:p384-0.13.1\"),\n            \"proposed-traits\": Label(\"@oot_crates_no_std//:proposed-traits-0.1.0\"),\n            \"rand_chacha\": Label(\"@oot_crates_no_std//:rand_chacha-0.3.1\"),\n            \"rand_core\": Label(\"@oot_crates_no_std//:rand_core-0.6.4\"),\n            \"sha2\": Label(\"@oot_crates_no_std//:sha2-0.10.9\"),\n            \"spdm-lib\": Label(\"@oot_crates_no_std//:spdm-lib-0.1.0\"),\n            \"zerocopy\": Label(\"@oot_crates_no_std//:zerocopy-0.8.47\"),\n        },\n    },\n}\n\n\n_NORMAL_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n        _COMMON_CONDITION: {\n        },\n    },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_CONDITIONS = {\n    \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"aarch64-linux-android\": [],\n    \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n    \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(target_os = \\\"wasi\\\")\": [],\n    \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"riscv32imc-unknown-none-elf\": [\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\"],\n    \"thumbv6m-none-eabi\": [\"@rules_rust//rust/platform:thumbv6m-none-eabi\"],\n    \"thumbv7em-none-eabi\": [\"@rules_rust//rust/platform:thumbv7em-none-eabi\"],\n    \"thumbv7m-none-eabi\": [\"@rules_rust//rust/platform:thumbv7m-none-eabi\"],\n    \"thumbv8m.main-none-eabi\": [\"@rules_rust//rust/platform:thumbv8m.main-none-eabi\"],\n    \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n    \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n    \"\"\"A macro for defining repositories for all generated crates.\n\n    Returns:\n      A list of repos visible to the module through the module extension.\n    \"\"\"\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__aead-0.5.2\",\n        sha256 = \"d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aead/0.5.2/download\"],\n        strip_prefix = \"aead-0.5.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aead-0.5.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__aes-0.8.4\",\n        sha256 = \"b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes/0.8.4/download\"],\n        strip_prefix = \"aes-0.8.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aes-0.8.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__aes-gcm-0.10.3\",\n        sha256 = \"831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes-gcm/0.10.3/download\"],\n        strip_prefix = \"aes-gcm-0.10.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aes-gcm-0.10.3.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__aspeed-ddk-0.1.0\",\n        commit = \"e93e85b0fff8a448a86c6a81bbbf1818ea6094e6\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/aspeed-rust.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aspeed-ddk-0.1.0.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__ast1060-pac-0.1.0\",\n        commit = \"564cd385f0b160b4a5ce435b930d28b87799bc96\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/ast1060-pac.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ast1060-pac-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__async-trait-0.1.89\",\n        sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n        strip_prefix = \"async-trait-0.1.89\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.async-trait-0.1.89.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bare-metal-0.2.5\",\n        sha256 = \"5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bare-metal/0.2.5/download\"],\n        strip_prefix = \"bare-metal-0.2.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bare-metal-0.2.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__base16ct-0.2.0\",\n        sha256 = \"4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/base16ct/0.2.0/download\"],\n        strip_prefix = \"base16ct-0.2.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.base16ct-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bitfield-0.13.2\",\n        sha256 = \"46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.13.2/download\"],\n        strip_prefix = \"bitfield-0.13.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bitfield-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bitfield-0.14.0\",\n        sha256 = \"2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.14.0/download\"],\n        strip_prefix = \"bitfield-0.14.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bitfield-0.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bitflags-2.11.0\",\n        sha256 = \"843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitflags/2.11.0/download\"],\n        strip_prefix = \"bitflags-2.11.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bitflags-2.11.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__block-buffer-0.10.4\",\n        sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n        strip_prefix = \"block-buffer-0.10.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.block-buffer-0.10.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__byteorder-1.5.0\",\n        sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n        strip_prefix = \"byteorder-1.5.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.byteorder-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cfg-if-1.0.4\",\n        sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n        strip_prefix = \"cfg-if-1.0.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cfg-if-1.0.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cipher-0.4.4\",\n        sha256 = \"773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cipher/0.4.4/download\"],\n        strip_prefix = \"cipher-0.4.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cipher-0.4.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__const-oid-0.9.6\",\n        sha256 = \"c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/const-oid/0.9.6/download\"],\n        strip_prefix = \"const-oid-0.9.6\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.const-oid-0.9.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-0.7.7\",\n        sha256 = \"8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m/0.7.7/download\"],\n        strip_prefix = \"cortex-m-0.7.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-0.7.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-rt-0.7.5\",\n        sha256 = \"801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-0.7.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-rt-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-rt-macros-0.7.5\",\n        sha256 = \"e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt-macros/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-macros-0.7.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-rt-macros-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-semihosting-0.5.0\",\n        sha256 = \"c23234600452033cc77e4b761e740e02d2c4168e11dbf36ab14a0f58973592b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-semihosting/0.5.0/download\"],\n        strip_prefix = \"cortex-m-semihosting-0.5.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-semihosting-0.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cpufeatures-0.2.17\",\n        sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n        strip_prefix = \"cpufeatures-0.2.17\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cpufeatures-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crc-3.4.0\",\n        sha256 = \"5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc/3.4.0/download\"],\n        strip_prefix = \"crc-3.4.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crc-3.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crc-catalog-2.4.0\",\n        sha256 = \"19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc-catalog/2.4.0/download\"],\n        strip_prefix = \"crc-catalog-2.4.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crc-catalog-2.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crypto-bigint-0.5.5\",\n        sha256 = \"0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-bigint/0.5.5/download\"],\n        strip_prefix = \"crypto-bigint-0.5.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crypto-bigint-0.5.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crypto-common-0.1.7\",\n        sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n        strip_prefix = \"crypto-common-0.1.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crypto-common-0.1.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ctr-0.9.2\",\n        sha256 = \"0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ctr/0.9.2/download\"],\n        strip_prefix = \"ctr-0.9.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ctr-0.9.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__der-0.7.10\",\n        sha256 = \"e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/der/0.7.10/download\"],\n        strip_prefix = \"der-0.7.10\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.der-0.7.10.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__digest-0.10.7\",\n        sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n        strip_prefix = \"digest-0.10.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.digest-0.10.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ecdsa-0.16.9\",\n        sha256 = \"ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ecdsa/0.16.9/download\"],\n        strip_prefix = \"ecdsa-0.16.9\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ecdsa-0.16.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__elliptic-curve-0.13.8\",\n        sha256 = \"b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/elliptic-curve/0.13.8/download\"],\n        strip_prefix = \"elliptic-curve-0.13.8\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.elliptic-curve-0.13.8.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-crc-macros-1.0.0\",\n        sha256 = \"4f1c75747a43b086df1a87fb2a889590bc0725e0abf54bba6d0c4bf7bd9e762c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-crc-macros/1.0.0/download\"],\n        strip_prefix = \"embedded-crc-macros-1.0.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-crc-macros-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-hal-0.2.7\",\n        sha256 = \"35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/0.2.7/download\"],\n        strip_prefix = \"embedded-hal-0.2.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-hal-0.2.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-hal-1.0.0\",\n        sha256 = \"361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-1.0.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-hal-1.0.0.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__embedded-hal-1.0.0-alpha.1\",\n        commit = \"599d44fdc7e709cb9ae6580ec11c0b7f7f102981\",\n        init_submodules = True,\n        remote = \"https://github.com/rust-embedded/embedded-hal.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-hal-1.0.0-alpha.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-io-0.6.1\",\n        sha256 = \"edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io/0.6.1/download\"],\n        strip_prefix = \"embedded-io-0.6.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-io-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-io-async-0.6.1\",\n        sha256 = \"3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io-async/0.6.1/download\"],\n        strip_prefix = \"embedded-io-async-0.6.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-io-async-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-storage-0.3.1\",\n        sha256 = \"a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-storage/0.3.1/download\"],\n        strip_prefix = \"embedded-storage-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-storage-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ff-0.13.1\",\n        sha256 = \"c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ff/0.13.1/download\"],\n        strip_prefix = \"ff-0.13.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ff-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__fugit-0.3.9\",\n        sha256 = \"4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/fugit/0.3.9/download\"],\n        strip_prefix = \"fugit-0.3.9\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.fugit-0.3.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__gcd-2.3.0\",\n        sha256 = \"1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/gcd/2.3.0/download\"],\n        strip_prefix = \"gcd-2.3.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.gcd-2.3.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__generic-array-0.14.7\",\n        sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n        strip_prefix = \"generic-array-0.14.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.generic-array-0.14.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__getrandom-0.2.17\",\n        sha256 = \"ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/getrandom/0.2.17/download\"],\n        strip_prefix = \"getrandom-0.2.17\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.getrandom-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ghash-0.5.1\",\n        sha256 = \"f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ghash/0.5.1/download\"],\n        strip_prefix = \"ghash-0.5.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ghash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__group-0.13.0\",\n        sha256 = \"f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/group/0.13.0/download\"],\n        strip_prefix = \"group-0.13.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.group-0.13.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__hash32-0.3.1\",\n        sha256 = \"47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hash32/0.3.1/download\"],\n        strip_prefix = \"hash32-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.hash32-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__heapless-0.8.0\",\n        sha256 = \"0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heapless/0.8.0/download\"],\n        strip_prefix = \"heapless-0.8.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.heapless-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__hex-literal-0.4.1\",\n        sha256 = \"6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hex-literal/0.4.1/download\"],\n        strip_prefix = \"hex-literal-0.4.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.hex-literal-0.4.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__hmac-0.12.1\",\n        sha256 = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hmac/0.12.1/download\"],\n        strip_prefix = \"hmac-0.12.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.hmac-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__inout-0.1.4\",\n        sha256 = \"879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/inout/0.1.4/download\"],\n        strip_prefix = \"inout-0.1.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.inout-0.1.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__libc-0.2.183\",\n        sha256 = \"b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/libc/0.2.183/download\"],\n        strip_prefix = \"libc-0.2.183\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.libc-0.2.183.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__log-0.4.29\",\n        sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n        strip_prefix = \"log-0.4.29\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.log-0.4.29.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__mctp-0.2.0\",\n        commit = \"9e52b626863b916d900ca1ddfdd9215baf0f80fc\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.mctp-0.2.0.bazel\"),\n        strip_prefix = \"mctp\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__mctp-estack-0.1.0\",\n        commit = \"9e52b626863b916d900ca1ddfdd9215baf0f80fc\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.mctp-estack-0.1.0.bazel\"),\n        strip_prefix = \"mctp-estack\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__mctp-lib-0.1.0\",\n        commit = \"8bb45a0d90c6fe35f1258d55a08809f5af0ac5d8\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/mctp-lib.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.mctp-lib-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__nb-0.1.3\",\n        sha256 = \"801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/0.1.3/download\"],\n        strip_prefix = \"nb-0.1.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.nb-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__nb-1.1.0\",\n        sha256 = \"8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/1.1.0/download\"],\n        strip_prefix = \"nb-1.1.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.nb-1.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__opaque-debug-0.3.1\",\n        sha256 = \"c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/opaque-debug/0.3.1/download\"],\n        strip_prefix = \"opaque-debug-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.opaque-debug-0.3.1.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__openprot-hal-blocking-0.1.0\",\n        commit = \"c6cd23a56f3cc7945b062ea1bcdabf3af0dba82d\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/openprot.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.openprot-hal-blocking-0.1.0.bazel\"),\n        strip_prefix = \"hal/blocking\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__p256-0.13.2\",\n        sha256 = \"c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p256/0.13.2/download\"],\n        strip_prefix = \"p256-0.13.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.p256-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__p384-0.13.1\",\n        sha256 = \"fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p384/0.13.1/download\"],\n        strip_prefix = \"p384-0.13.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.p384-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__panic-halt-1.0.0\",\n        sha256 = \"a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/panic-halt/1.0.0/download\"],\n        strip_prefix = \"panic-halt-1.0.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.panic-halt-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__paste-1.0.15\",\n        sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n        strip_prefix = \"paste-1.0.15\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.paste-1.0.15.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__polyval-0.6.2\",\n        sha256 = \"9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/polyval/0.6.2/download\"],\n        strip_prefix = \"polyval-0.6.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.polyval-0.6.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ppv-lite86-0.2.21\",\n        sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n        strip_prefix = \"ppv-lite86-0.2.21\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ppv-lite86-0.2.21.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__primeorder-0.13.6\",\n        sha256 = \"353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/primeorder/0.13.6/download\"],\n        strip_prefix = \"primeorder-0.13.6\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.primeorder-0.13.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__proc-macro2-1.0.106\",\n        sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n        strip_prefix = \"proc-macro2-1.0.106\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.proc-macro2-1.0.106.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__proposed-traits-0.1.0\",\n        commit = \"85641310df5a5276c67f81621b104322cff0286c\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/proposed_traits.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.proposed-traits-0.1.0.bazel\"),\n        strip_prefix = \"proposed-traits\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__quote-1.0.45\",\n        sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n        strip_prefix = \"quote-1.0.45\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.quote-1.0.45.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rand_chacha-0.3.1\",\n        sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n        strip_prefix = \"rand_chacha-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rand_chacha-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rand_core-0.6.4\",\n        sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n        strip_prefix = \"rand_core-0.6.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rand_core-0.6.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rand_core-0.9.5\",\n        sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n        strip_prefix = \"rand_core-0.9.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rand_core-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rfc6979-0.4.0\",\n        sha256 = \"f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rfc6979/0.4.0/download\"],\n        strip_prefix = \"rfc6979-0.4.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rfc6979-0.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rustc_version-0.2.3\",\n        sha256 = \"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustc_version/0.2.3/download\"],\n        strip_prefix = \"rustc_version-0.2.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rustc_version-0.2.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__sec1-0.7.3\",\n        sha256 = \"d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sec1/0.7.3/download\"],\n        strip_prefix = \"sec1-0.7.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.sec1-0.7.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__semver-0.9.0\",\n        sha256 = \"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver/0.9.0/download\"],\n        strip_prefix = \"semver-0.9.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.semver-0.9.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__semver-parser-0.7.0\",\n        sha256 = \"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver-parser/0.7.0/download\"],\n        strip_prefix = \"semver-parser-0.7.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.semver-parser-0.7.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__sha2-0.10.9\",\n        sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n        strip_prefix = \"sha2-0.10.9\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.sha2-0.10.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__signature-2.2.0\",\n        sha256 = \"77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/signature/2.2.0/download\"],\n        strip_prefix = \"signature-2.2.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.signature-2.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__smbus-pec-1.0.1\",\n        sha256 = \"ca0763a680cd5d72b28f7bfc8a054c117d8841380a6ad4f72f05bd2a34217d3e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smbus-pec/1.0.1/download\"],\n        strip_prefix = \"smbus-pec-1.0.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.smbus-pec-1.0.1.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__spdm-lib-0.1.0\",\n        commit = \"e01b0b9149bd51f4bad1e25d17fa5456f3642a9d\",\n        init_submodules = True,\n        remote = \"https://github.com/9elements/spdm-lib.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.spdm-lib-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__stable_deref_trait-1.2.1\",\n        sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n        strip_prefix = \"stable_deref_trait-1.2.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.stable_deref_trait-1.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__subtle-2.6.1\",\n        sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n        strip_prefix = \"subtle-2.6.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.subtle-2.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__syn-2.0.117\",\n        sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n        strip_prefix = \"syn-2.0.117\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.syn-2.0.117.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__typenum-1.19.0\",\n        sha256 = \"562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/typenum/1.19.0/download\"],\n        strip_prefix = \"typenum-1.19.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.typenum-1.19.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__unicode-ident-1.0.24\",\n        sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n        strip_prefix = \"unicode-ident-1.0.24\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.unicode-ident-1.0.24.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__universal-hash-0.5.1\",\n        sha256 = \"fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/universal-hash/0.5.1/download\"],\n        strip_prefix = \"universal-hash-0.5.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.universal-hash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__uuid-1.23.0\",\n        sha256 = \"5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/uuid/1.23.0/download\"],\n        strip_prefix = \"uuid-1.23.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.uuid-1.23.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__vcell-0.1.3\",\n        sha256 = \"77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/vcell/0.1.3/download\"],\n        strip_prefix = \"vcell-0.1.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.vcell-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__version_check-0.9.5\",\n        sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n        strip_prefix = \"version_check-0.9.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.version_check-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__void-1.0.2\",\n        sha256 = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/void/1.0.2/download\"],\n        strip_prefix = \"void-1.0.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.void-1.0.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__volatile-register-0.2.2\",\n        sha256 = \"de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/volatile-register/0.2.2/download\"],\n        strip_prefix = \"volatile-register-0.2.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.volatile-register-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__wasi-0.11.1-wasi-snapshot-preview1\",\n        sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n        strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zerocopy-0.8.47\",\n        sha256 = \"efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy/0.8.47/download\"],\n        strip_prefix = \"zerocopy-0.8.47\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zerocopy-0.8.47.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zerocopy-derive-0.8.47\",\n        sha256 = \"0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.47/download\"],\n        strip_prefix = \"zerocopy-derive-0.8.47\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zerocopy-derive-0.8.47.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zeroize-1.8.2\",\n        sha256 = \"b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize/1.8.2/download\"],\n        strip_prefix = \"zeroize-1.8.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zeroize-1.8.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zeroize_derive-1.4.3\",\n        sha256 = \"85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize_derive/1.4.3/download\"],\n        strip_prefix = \"zeroize_derive-1.4.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zeroize_derive-1.4.3.bazel\"),\n    )\n\n    return [\n       struct(repo=\"oot_crates_no_std__aes-0.8.4\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__aes-gcm-0.10.3\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__aspeed-ddk-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__ast1060-pac-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cipher-0.4.4\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cortex-m-0.7.7\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cortex-m-rt-0.7.5\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cortex-m-semihosting-0.5.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__ctr-0.9.2\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__ecdsa-0.16.9\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__embedded-hal-1.0.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__embedded-io-0.6.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__fugit-0.3.9\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__getrandom-0.2.17\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__heapless-0.8.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__hex-literal-0.4.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__hmac-0.12.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__mctp-0.2.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__mctp-lib-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__nb-1.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__openprot-hal-blocking-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__p256-0.13.2\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__p384-0.13.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__proposed-traits-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__rand_chacha-0.3.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__rand_core-0.6.4\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__sha2-0.10.9\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__spdm-lib-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__zerocopy-0.8.47\", is_dev_dep = False),\n    ]\n"
+                "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n    \"\"\"Flatten a list of dependency maps into one dictionary.\n\n    Dependency maps have the following structure:\n\n    ```python\n    DEPENDENCIES_MAP = {\n        # The first key in the map is a Bazel package\n        # name of the workspace this file is defined in.\n        \"workspace_member_package\": {\n\n            # Not all dependencies are supported for all platforms.\n            # the condition key is the condition required to be true\n            # on the host platform.\n            \"condition\": {\n\n                # An alias to a crate target.     # The label of the crate target the\n                # Aliases are only crate names.   # package name refers to.\n                \"package_name\":                   \"@full//:label\",\n            }\n        }\n    }\n    ```\n\n    Args:\n        all_dependency_maps (list): A list of dicts as described above\n\n    Returns:\n        dict: A dictionary as described above\n    \"\"\"\n    dependencies = {}\n\n    for workspace_deps_map in all_dependency_maps:\n        for pkg_name, conditional_deps_map in workspace_deps_map.items():\n            if pkg_name not in dependencies:\n                non_frozen_map = dict()\n                for key, values in conditional_deps_map.items():\n                    non_frozen_map.update({key: dict(values.items())})\n                dependencies.setdefault(pkg_name, non_frozen_map)\n                continue\n\n            for condition, deps_map in conditional_deps_map.items():\n                # If the condition has not been recorded, do so and continue\n                if condition not in dependencies[pkg_name]:\n                    dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n                    continue\n\n                # Alert on any miss-matched dependencies\n                inconsistent_entries = []\n                for crate_name, crate_label in deps_map.items():\n                    existing = dependencies[pkg_name][condition].get(crate_name)\n                    if existing and existing != crate_label:\n                        inconsistent_entries.append((crate_name, existing, crate_label))\n                    dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n    return dependencies\n\ndef crate_deps(deps, package_name = None):\n    \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n    Args:\n        deps (list): The desired list of crate targets.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()`.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if not deps:\n        return []\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Join both sets of dependencies\n    dependencies = _flatten_dependency_maps([\n        _NORMAL_DEPENDENCIES,\n        _NORMAL_DEV_DEPENDENCIES,\n        _PROC_MACRO_DEPENDENCIES,\n        _PROC_MACRO_DEV_DEPENDENCIES,\n        _BUILD_DEPENDENCIES,\n        _BUILD_PROC_MACRO_DEPENDENCIES,\n    ]).pop(package_name, {})\n\n    # Combine all conditional packages so we can easily index over a flat list\n    # TODO: Perhaps this should actually return select statements and maintain\n    # the conditionals of the dependencies\n    flat_deps = {}\n    for deps_set in dependencies.values():\n        for crate_name, crate_label in deps_set.items():\n            flat_deps.update({crate_name: crate_label})\n\n    missing_crates = []\n    crate_targets = []\n    for crate_target in deps:\n        if crate_target not in flat_deps:\n            missing_crates.append(crate_target)\n        else:\n            crate_targets.append(flat_deps[crate_target])\n\n    if missing_crates:\n        fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n            missing_crates,\n            package_name,\n            dependencies,\n        ))\n\n    return crate_targets\n\ndef all_crate_deps(\n        normal = False, \n        normal_dev = False, \n        proc_macro = False, \n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n    for the package where this macro is called.\n\n    If no parameters are set, all normal dependencies are returned. Setting any one flag will\n    otherwise impact the contents of the returned list.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        list: A list of labels to generated rust targets (str)\n    \"\"\"\n\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_dependency_maps = []\n    if normal:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n    if normal_dev:\n        all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n    if proc_macro:\n        all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n    if proc_macro_dev:\n        all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n    if build:\n        all_dependency_maps.append(_BUILD_DEPENDENCIES)\n    if build_proc_macro:\n        all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n    # Default to always using normal dependencies\n    if not all_dependency_maps:\n        all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n    dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n    if not dependencies:\n        if dependencies == None:\n            fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n        else:\n            return []\n\n    crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n    for condition, deps in dependencies.items():\n        crate_deps += selects.with_or({\n            tuple(_CONDITIONS[condition]): deps.values(),\n            \"//conditions:default\": [],\n        })\n\n    return crate_deps\n\ndef aliases(\n        normal = False,\n        normal_dev = False,\n        proc_macro = False,\n        proc_macro_dev = False,\n        build = False,\n        build_proc_macro = False,\n        package_name = None):\n    \"\"\"Produces a map of Crate alias names to their original label\n\n    If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n    Setting any one flag will otherwise determine the contents of the returned dict.\n\n    Args:\n        normal (bool, optional): If True, normal dependencies are included in the\n            output list.\n        normal_dev (bool, optional): If True, normal dev dependencies will be\n            included in the output list..\n        proc_macro (bool, optional): If True, proc_macro dependencies are included\n            in the output list.\n        proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n            included in the output list.\n        build (bool, optional): If True, build dependencies are included\n            in the output list.\n        build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n            included in the output list.\n        package_name (str, optional): The package name of the set of dependencies to look up.\n            Defaults to `native.package_name()` when unset.\n\n    Returns:\n        dict: The aliases of all associated packages\n    \"\"\"\n    if package_name == None:\n        package_name = native.package_name()\n\n    # Determine the relevant maps to use\n    all_aliases_maps = []\n    if normal:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n    if normal_dev:\n        all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n    if proc_macro:\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n    if proc_macro_dev:\n        all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n    if build:\n        all_aliases_maps.append(_BUILD_ALIASES)\n    if build_proc_macro:\n        all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n    # Default to always using normal aliases\n    if not all_aliases_maps:\n        all_aliases_maps.append(_NORMAL_ALIASES)\n        all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n    aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n    if not aliases:\n        return dict()\n\n    common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n    # If there are only common items in the dictionary, immediately return them\n    if not len(aliases.keys()) == 1:\n        return dict(common_items)\n\n    # Build a single select statement where each conditional has accounted for the\n    # common set of aliases.\n    crate_aliases = {\"//conditions:default\": dict(common_items)}\n    for condition, deps in aliases.items():\n        condition_triples = _CONDITIONS[condition]\n        for triple in condition_triples:\n            if triple in crate_aliases:\n                crate_aliases[triple].update(deps)\n            else:\n                crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n    return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n        _COMMON_CONDITION: {\n            \"aes\": Label(\"@oot_crates_no_std//:aes-0.8.4\"),\n            \"aes-gcm\": Label(\"@oot_crates_no_std//:aes-gcm-0.10.3\"),\n            \"aspeed-ddk\": Label(\"@oot_crates_no_std//:aspeed-ddk-0.1.0\"),\n            \"ast1060-pac\": Label(\"@oot_crates_no_std//:ast1060-pac-0.1.0\"),\n            \"cipher\": Label(\"@oot_crates_no_std//:cipher-0.4.4\"),\n            \"cortex-m\": Label(\"@oot_crates_no_std//:cortex-m-0.7.7\"),\n            \"cortex-m-rt\": Label(\"@oot_crates_no_std//:cortex-m-rt-0.7.5\"),\n            \"cortex-m-semihosting\": Label(\"@oot_crates_no_std//:cortex-m-semihosting-0.5.0\"),\n            \"ctr\": Label(\"@oot_crates_no_std//:ctr-0.9.2\"),\n            \"ecdsa\": Label(\"@oot_crates_no_std//:ecdsa-0.16.9\"),\n            \"embedded-hal\": Label(\"@oot_crates_no_std//:embedded-hal-1.0.0\"),\n            \"embedded-io\": Label(\"@oot_crates_no_std//:embedded-io-0.6.1\"),\n            \"fugit\": Label(\"@oot_crates_no_std//:fugit-0.3.9\"),\n            \"getrandom\": Label(\"@oot_crates_no_std//:getrandom-0.2.17\"),\n            \"heapless\": Label(\"@oot_crates_no_std//:heapless-0.8.0\"),\n            \"hex-literal\": Label(\"@oot_crates_no_std//:hex-literal-0.4.1\"),\n            \"hmac\": Label(\"@oot_crates_no_std//:hmac-0.12.1\"),\n            \"mctp\": Label(\"@oot_crates_no_std//:mctp-0.2.0\"),\n            \"mctp-lib\": Label(\"@oot_crates_no_std//:mctp-lib-0.1.0\"),\n            \"nb\": Label(\"@oot_crates_no_std//:nb-1.1.0\"),\n            \"openprot-hal-blocking\": Label(\"@oot_crates_no_std//:openprot-hal-blocking-0.1.0\"),\n            \"p256\": Label(\"@oot_crates_no_std//:p256-0.13.2\"),\n            \"p384\": Label(\"@oot_crates_no_std//:p384-0.13.1\"),\n            \"proposed-traits\": Label(\"@oot_crates_no_std//:proposed-traits-0.1.0\"),\n            \"rand_chacha\": Label(\"@oot_crates_no_std//:rand_chacha-0.3.1\"),\n            \"rand_core\": Label(\"@oot_crates_no_std//:rand_core-0.6.4\"),\n            \"sha2\": Label(\"@oot_crates_no_std//:sha2-0.10.9\"),\n            \"spdm-lib\": Label(\"@oot_crates_no_std//:spdm-lib-0.1.0\"),\n            \"zerocopy\": Label(\"@oot_crates_no_std//:zerocopy-0.8.47\"),\n        },\n    },\n}\n\n\n_NORMAL_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n        _COMMON_CONDITION: {\n        },\n    },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n    \"third_party/crates_io/crates_no_std\": {\n    },\n}\n\n\n_CONDITIONS = {\n    \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"aarch64-linux-android\": [],\n    \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n    \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n    \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n    \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"cfg(target_os = \\\"wasi\\\")\": [],\n    \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-apple-darwin\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n    \"riscv32imc-unknown-none-elf\": [\"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\"],\n    \"thumbv6m-none-eabi\": [\"@rules_rust//rust/platform:thumbv6m-none-eabi\"],\n    \"thumbv7em-none-eabi\": [\"@rules_rust//rust/platform:thumbv7em-none-eabi\"],\n    \"thumbv7m-none-eabi\": [\"@rules_rust//rust/platform:thumbv7m-none-eabi\"],\n    \"thumbv8m.main-none-eabi\": [\"@rules_rust//rust/platform:thumbv8m.main-none-eabi\"],\n    \"x86_64-apple-darwin\": [\"@rules_rust//rust/platform:x86_64-apple-darwin\"],\n    \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n    \"\"\"A macro for defining repositories for all generated crates.\n\n    Returns:\n      A list of repos visible to the module through the module extension.\n    \"\"\"\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__aead-0.5.2\",\n        sha256 = \"d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aead/0.5.2/download\"],\n        strip_prefix = \"aead-0.5.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aead-0.5.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__aes-0.8.4\",\n        sha256 = \"b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes/0.8.4/download\"],\n        strip_prefix = \"aes-0.8.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aes-0.8.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__aes-gcm-0.10.3\",\n        sha256 = \"831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/aes-gcm/0.10.3/download\"],\n        strip_prefix = \"aes-gcm-0.10.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aes-gcm-0.10.3.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__aspeed-ddk-0.1.0\",\n        commit = \"ce3b5677b95bc98a61ebf8783d00d93a910c4495\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/aspeed-rust.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.aspeed-ddk-0.1.0.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__ast1060-pac-0.1.0\",\n        commit = \"564cd385f0b160b4a5ce435b930d28b87799bc96\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/ast1060-pac.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ast1060-pac-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__async-trait-0.1.89\",\n        sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n        strip_prefix = \"async-trait-0.1.89\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.async-trait-0.1.89.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bare-metal-0.2.5\",\n        sha256 = \"5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bare-metal/0.2.5/download\"],\n        strip_prefix = \"bare-metal-0.2.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bare-metal-0.2.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__base16ct-0.2.0\",\n        sha256 = \"4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/base16ct/0.2.0/download\"],\n        strip_prefix = \"base16ct-0.2.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.base16ct-0.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bitfield-0.13.2\",\n        sha256 = \"46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.13.2/download\"],\n        strip_prefix = \"bitfield-0.13.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bitfield-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bitfield-0.14.0\",\n        sha256 = \"2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitfield/0.14.0/download\"],\n        strip_prefix = \"bitfield-0.14.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bitfield-0.14.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__bitflags-2.11.0\",\n        sha256 = \"843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/bitflags/2.11.0/download\"],\n        strip_prefix = \"bitflags-2.11.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.bitflags-2.11.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__block-buffer-0.10.4\",\n        sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n        strip_prefix = \"block-buffer-0.10.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.block-buffer-0.10.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__byteorder-1.5.0\",\n        sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n        strip_prefix = \"byteorder-1.5.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.byteorder-1.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cfg-if-1.0.4\",\n        sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n        strip_prefix = \"cfg-if-1.0.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cfg-if-1.0.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cipher-0.4.4\",\n        sha256 = \"773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cipher/0.4.4/download\"],\n        strip_prefix = \"cipher-0.4.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cipher-0.4.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__const-oid-0.9.6\",\n        sha256 = \"c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/const-oid/0.9.6/download\"],\n        strip_prefix = \"const-oid-0.9.6\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.const-oid-0.9.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-0.7.7\",\n        sha256 = \"8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m/0.7.7/download\"],\n        strip_prefix = \"cortex-m-0.7.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-0.7.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-rt-0.7.5\",\n        sha256 = \"801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-0.7.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-rt-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-rt-macros-0.7.5\",\n        sha256 = \"e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-rt-macros/0.7.5/download\"],\n        strip_prefix = \"cortex-m-rt-macros-0.7.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-rt-macros-0.7.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cortex-m-semihosting-0.5.0\",\n        sha256 = \"c23234600452033cc77e4b761e740e02d2c4168e11dbf36ab14a0f58973592b0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cortex-m-semihosting/0.5.0/download\"],\n        strip_prefix = \"cortex-m-semihosting-0.5.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cortex-m-semihosting-0.5.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__cpufeatures-0.2.17\",\n        sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n        strip_prefix = \"cpufeatures-0.2.17\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.cpufeatures-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crc-3.4.0\",\n        sha256 = \"5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc/3.4.0/download\"],\n        strip_prefix = \"crc-3.4.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crc-3.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crc-catalog-2.4.0\",\n        sha256 = \"19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crc-catalog/2.4.0/download\"],\n        strip_prefix = \"crc-catalog-2.4.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crc-catalog-2.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__critical-section-1.2.0\",\n        sha256 = \"790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/critical-section/1.2.0/download\"],\n        strip_prefix = \"critical-section-1.2.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.critical-section-1.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crypto-bigint-0.5.5\",\n        sha256 = \"0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-bigint/0.5.5/download\"],\n        strip_prefix = \"crypto-bigint-0.5.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crypto-bigint-0.5.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__crypto-common-0.1.7\",\n        sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n        strip_prefix = \"crypto-common-0.1.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.crypto-common-0.1.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ctr-0.9.2\",\n        sha256 = \"0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ctr/0.9.2/download\"],\n        strip_prefix = \"ctr-0.9.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ctr-0.9.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__der-0.7.10\",\n        sha256 = \"e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/der/0.7.10/download\"],\n        strip_prefix = \"der-0.7.10\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.der-0.7.10.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__digest-0.10.7\",\n        sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n        strip_prefix = \"digest-0.10.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.digest-0.10.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ecdsa-0.16.9\",\n        sha256 = \"ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ecdsa/0.16.9/download\"],\n        strip_prefix = \"ecdsa-0.16.9\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ecdsa-0.16.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__elliptic-curve-0.13.8\",\n        sha256 = \"b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/elliptic-curve/0.13.8/download\"],\n        strip_prefix = \"elliptic-curve-0.13.8\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.elliptic-curve-0.13.8.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-crc-macros-1.0.0\",\n        sha256 = \"4f1c75747a43b086df1a87fb2a889590bc0725e0abf54bba6d0c4bf7bd9e762c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-crc-macros/1.0.0/download\"],\n        strip_prefix = \"embedded-crc-macros-1.0.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-crc-macros-1.0.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-hal-0.2.7\",\n        sha256 = \"35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/0.2.7/download\"],\n        strip_prefix = \"embedded-hal-0.2.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-hal-0.2.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-hal-1.0.0\",\n        sha256 = \"361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-hal/1.0.0/download\"],\n        strip_prefix = \"embedded-hal-1.0.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-hal-1.0.0.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__embedded-hal-1.0.0-alpha.1\",\n        commit = \"599d44fdc7e709cb9ae6580ec11c0b7f7f102981\",\n        init_submodules = True,\n        remote = \"https://github.com/rust-embedded/embedded-hal.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-hal-1.0.0-alpha.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-io-0.6.1\",\n        sha256 = \"edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io/0.6.1/download\"],\n        strip_prefix = \"embedded-io-0.6.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-io-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-io-async-0.6.1\",\n        sha256 = \"3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-io-async/0.6.1/download\"],\n        strip_prefix = \"embedded-io-async-0.6.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-io-async-0.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__embedded-storage-0.3.1\",\n        sha256 = \"a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/embedded-storage/0.3.1/download\"],\n        strip_prefix = \"embedded-storage-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.embedded-storage-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ff-0.13.1\",\n        sha256 = \"c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ff/0.13.1/download\"],\n        strip_prefix = \"ff-0.13.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ff-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__fugit-0.3.9\",\n        sha256 = \"4e639847d312d9a82d2e75b0edcc1e934efcc64e6cb7aa94f0b1fbec0bc231d6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/fugit/0.3.9/download\"],\n        strip_prefix = \"fugit-0.3.9\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.fugit-0.3.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__gcd-2.3.0\",\n        sha256 = \"1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/gcd/2.3.0/download\"],\n        strip_prefix = \"gcd-2.3.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.gcd-2.3.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__generic-array-0.14.7\",\n        sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n        strip_prefix = \"generic-array-0.14.7\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.generic-array-0.14.7.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__getrandom-0.2.17\",\n        sha256 = \"ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/getrandom/0.2.17/download\"],\n        strip_prefix = \"getrandom-0.2.17\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.getrandom-0.2.17.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ghash-0.5.1\",\n        sha256 = \"f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ghash/0.5.1/download\"],\n        strip_prefix = \"ghash-0.5.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ghash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__group-0.13.0\",\n        sha256 = \"f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/group/0.13.0/download\"],\n        strip_prefix = \"group-0.13.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.group-0.13.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__hash32-0.3.1\",\n        sha256 = \"47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hash32/0.3.1/download\"],\n        strip_prefix = \"hash32-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.hash32-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__heapless-0.8.0\",\n        sha256 = \"0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/heapless/0.8.0/download\"],\n        strip_prefix = \"heapless-0.8.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.heapless-0.8.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__hex-literal-0.4.1\",\n        sha256 = \"6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hex-literal/0.4.1/download\"],\n        strip_prefix = \"hex-literal-0.4.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.hex-literal-0.4.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__hmac-0.12.1\",\n        sha256 = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/hmac/0.12.1/download\"],\n        strip_prefix = \"hmac-0.12.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.hmac-0.12.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__inout-0.1.4\",\n        sha256 = \"879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/inout/0.1.4/download\"],\n        strip_prefix = \"inout-0.1.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.inout-0.1.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__libc-0.2.183\",\n        sha256 = \"b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/libc/0.2.183/download\"],\n        strip_prefix = \"libc-0.2.183\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.libc-0.2.183.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__log-0.4.29\",\n        sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n        strip_prefix = \"log-0.4.29\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.log-0.4.29.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__mctp-0.2.0\",\n        commit = \"9e52b626863b916d900ca1ddfdd9215baf0f80fc\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.mctp-0.2.0.bazel\"),\n        strip_prefix = \"mctp\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__mctp-estack-0.1.0\",\n        commit = \"9e52b626863b916d900ca1ddfdd9215baf0f80fc\",\n        init_submodules = True,\n        remote = \"https://github.com/CodeConstruct/mctp-rs.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.mctp-estack-0.1.0.bazel\"),\n        strip_prefix = \"mctp-estack\",\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__mctp-lib-0.1.0\",\n        commit = \"8bb45a0d90c6fe35f1258d55a08809f5af0ac5d8\",\n        init_submodules = True,\n        remote = \"https://github.com/OpenPRoT/mctp-lib.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.mctp-lib-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__nb-0.1.3\",\n        sha256 = \"801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/0.1.3/download\"],\n        strip_prefix = \"nb-0.1.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.nb-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__nb-1.1.0\",\n        sha256 = \"8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/nb/1.1.0/download\"],\n        strip_prefix = \"nb-1.1.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.nb-1.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__opaque-debug-0.3.1\",\n        sha256 = \"c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/opaque-debug/0.3.1/download\"],\n        strip_prefix = \"opaque-debug-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.opaque-debug-0.3.1.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__openprot-hal-blocking-0.1.0\",\n        commit = \"c6cd23a56f3cc7945b062ea1bcdabf3af0dba82d\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/openprot.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.openprot-hal-blocking-0.1.0.bazel\"),\n        strip_prefix = \"hal/blocking\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__p256-0.13.2\",\n        sha256 = \"c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p256/0.13.2/download\"],\n        strip_prefix = \"p256-0.13.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.p256-0.13.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__p384-0.13.1\",\n        sha256 = \"fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/p384/0.13.1/download\"],\n        strip_prefix = \"p384-0.13.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.p384-0.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__paste-1.0.15\",\n        sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n        strip_prefix = \"paste-1.0.15\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.paste-1.0.15.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__polyval-0.6.2\",\n        sha256 = \"9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/polyval/0.6.2/download\"],\n        strip_prefix = \"polyval-0.6.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.polyval-0.6.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__portable-atomic-1.13.1\",\n        sha256 = \"c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/portable-atomic/1.13.1/download\"],\n        strip_prefix = \"portable-atomic-1.13.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.portable-atomic-1.13.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__ppv-lite86-0.2.21\",\n        sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n        strip_prefix = \"ppv-lite86-0.2.21\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.ppv-lite86-0.2.21.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__primeorder-0.13.6\",\n        sha256 = \"353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/primeorder/0.13.6/download\"],\n        strip_prefix = \"primeorder-0.13.6\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.primeorder-0.13.6.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__proc-macro2-1.0.106\",\n        sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n        strip_prefix = \"proc-macro2-1.0.106\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.proc-macro2-1.0.106.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__proposed-traits-0.1.0\",\n        commit = \"85641310df5a5276c67f81621b104322cff0286c\",\n        init_submodules = True,\n        remote = \"https://github.com/rusty1968/proposed_traits.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.proposed-traits-0.1.0.bazel\"),\n        strip_prefix = \"proposed-traits\",\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__quote-1.0.45\",\n        sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n        strip_prefix = \"quote-1.0.45\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.quote-1.0.45.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rand_chacha-0.3.1\",\n        sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n        strip_prefix = \"rand_chacha-0.3.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rand_chacha-0.3.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rand_core-0.6.4\",\n        sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n        strip_prefix = \"rand_core-0.6.4\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rand_core-0.6.4.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rand_core-0.9.5\",\n        sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n        strip_prefix = \"rand_core-0.9.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rand_core-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rfc6979-0.4.0\",\n        sha256 = \"f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rfc6979/0.4.0/download\"],\n        strip_prefix = \"rfc6979-0.4.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rfc6979-0.4.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__rustc_version-0.2.3\",\n        sha256 = \"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/rustc_version/0.2.3/download\"],\n        strip_prefix = \"rustc_version-0.2.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.rustc_version-0.2.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__sec1-0.7.3\",\n        sha256 = \"d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sec1/0.7.3/download\"],\n        strip_prefix = \"sec1-0.7.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.sec1-0.7.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__semver-0.9.0\",\n        sha256 = \"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver/0.9.0/download\"],\n        strip_prefix = \"semver-0.9.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.semver-0.9.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__semver-parser-0.7.0\",\n        sha256 = \"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/semver-parser/0.7.0/download\"],\n        strip_prefix = \"semver-parser-0.7.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.semver-parser-0.7.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__sha2-0.10.9\",\n        sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n        strip_prefix = \"sha2-0.10.9\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.sha2-0.10.9.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__signature-2.2.0\",\n        sha256 = \"77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/signature/2.2.0/download\"],\n        strip_prefix = \"signature-2.2.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.signature-2.2.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__smbus-pec-1.0.1\",\n        sha256 = \"ca0763a680cd5d72b28f7bfc8a054c117d8841380a6ad4f72f05bd2a34217d3e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/smbus-pec/1.0.1/download\"],\n        strip_prefix = \"smbus-pec-1.0.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.smbus-pec-1.0.1.bazel\"),\n    )\n\n    maybe(\n        new_git_repository,\n        name = \"oot_crates_no_std__spdm-lib-0.1.0\",\n        commit = \"e01b0b9149bd51f4bad1e25d17fa5456f3642a9d\",\n        init_submodules = True,\n        remote = \"https://github.com/9elements/spdm-lib.git\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.spdm-lib-0.1.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__stable_deref_trait-1.2.1\",\n        sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n        strip_prefix = \"stable_deref_trait-1.2.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.stable_deref_trait-1.2.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__static_cell-2.1.1\",\n        sha256 = \"0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/static_cell/2.1.1/download\"],\n        strip_prefix = \"static_cell-2.1.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.static_cell-2.1.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__subtle-2.6.1\",\n        sha256 = \"13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/subtle/2.6.1/download\"],\n        strip_prefix = \"subtle-2.6.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.subtle-2.6.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__syn-2.0.117\",\n        sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n        strip_prefix = \"syn-2.0.117\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.syn-2.0.117.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__typenum-1.19.0\",\n        sha256 = \"562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/typenum/1.19.0/download\"],\n        strip_prefix = \"typenum-1.19.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.typenum-1.19.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__unicode-ident-1.0.24\",\n        sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n        strip_prefix = \"unicode-ident-1.0.24\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.unicode-ident-1.0.24.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__universal-hash-0.5.1\",\n        sha256 = \"fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/universal-hash/0.5.1/download\"],\n        strip_prefix = \"universal-hash-0.5.1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.universal-hash-0.5.1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__uuid-1.23.0\",\n        sha256 = \"5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/uuid/1.23.0/download\"],\n        strip_prefix = \"uuid-1.23.0\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.uuid-1.23.0.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__vcell-0.1.3\",\n        sha256 = \"77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/vcell/0.1.3/download\"],\n        strip_prefix = \"vcell-0.1.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.vcell-0.1.3.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__version_check-0.9.5\",\n        sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n        strip_prefix = \"version_check-0.9.5\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.version_check-0.9.5.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__void-1.0.2\",\n        sha256 = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/void/1.0.2/download\"],\n        strip_prefix = \"void-1.0.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.void-1.0.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__volatile-register-0.2.2\",\n        sha256 = \"de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/volatile-register/0.2.2/download\"],\n        strip_prefix = \"volatile-register-0.2.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.volatile-register-0.2.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__wasi-0.11.1-wasi-snapshot-preview1\",\n        sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n        strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zerocopy-0.8.47\",\n        sha256 = \"efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy/0.8.47/download\"],\n        strip_prefix = \"zerocopy-0.8.47\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zerocopy-0.8.47.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zerocopy-derive-0.8.47\",\n        sha256 = \"0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.47/download\"],\n        strip_prefix = \"zerocopy-derive-0.8.47\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zerocopy-derive-0.8.47.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zeroize-1.8.2\",\n        sha256 = \"b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize/1.8.2/download\"],\n        strip_prefix = \"zeroize-1.8.2\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zeroize-1.8.2.bazel\"),\n    )\n\n    maybe(\n        http_archive,\n        name = \"oot_crates_no_std__zeroize_derive-1.4.3\",\n        sha256 = \"85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e\",\n        type = \"tar.gz\",\n        urls = [\"https://static.crates.io/crates/zeroize_derive/1.4.3/download\"],\n        strip_prefix = \"zeroize_derive-1.4.3\",\n        build_file = Label(\"@oot_crates_no_std//oot_crates_no_std:BUILD.zeroize_derive-1.4.3.bazel\"),\n    )\n\n    return [\n       struct(repo=\"oot_crates_no_std__aes-0.8.4\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__aes-gcm-0.10.3\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__aspeed-ddk-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__ast1060-pac-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cipher-0.4.4\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cortex-m-0.7.7\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cortex-m-rt-0.7.5\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__cortex-m-semihosting-0.5.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__ctr-0.9.2\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__ecdsa-0.16.9\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__embedded-hal-1.0.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__embedded-io-0.6.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__fugit-0.3.9\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__getrandom-0.2.17\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__heapless-0.8.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__hex-literal-0.4.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__hmac-0.12.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__mctp-0.2.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__mctp-lib-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__nb-1.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__openprot-hal-blocking-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__p256-0.13.2\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__p384-0.13.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__proposed-traits-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__rand_chacha-0.3.1\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__rand_core-0.6.4\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__sha2-0.10.9\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__spdm-lib-0.1.0\", is_dev_dep = False),\n       struct(repo=\"oot_crates_no_std__zerocopy-0.8.47\", is_dev_dep = False),\n    ]\n"
               }
             }
           },
@@ -4003,9 +4003,9 @@
               "patches": [],
               "shallow_since": "",
               "remote": "https://github.com/OpenPRoT/aspeed-rust.git",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\n    \"@rules_rust//cargo:defs.bzl\",\n    \"cargo_build_script\",\n    \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"aspeed_ddk\",\n    deps = [\n        \"@oot_crates_no_std__aspeed-ddk-0.1.0//:build_script_build\",\n        \"@oot_crates_no_std__ast1060-pac-0.1.0//:ast1060_pac\",\n        \"@oot_crates_no_std__bitflags-2.11.0//:bitflags\",\n        \"@oot_crates_no_std__cortex-m-0.7.7//:cortex_m\",\n        \"@oot_crates_no_std__cortex-m-rt-0.7.5//:cortex_m_rt\",\n        \"@oot_crates_no_std__embedded-hal-1.0.0//:embedded_hal\",\n        \"@oot_crates_no_std__embedded-hal-1.0.0-alpha.1//:embedded_hal\",\n        \"@oot_crates_no_std__embedded-io-0.6.1//:embedded_io\",\n        \"@oot_crates_no_std__fugit-0.3.9//:fugit\",\n        \"@oot_crates_no_std__heapless-0.8.0//:heapless\",\n        \"@oot_crates_no_std__hex-literal-0.4.1//:hex_literal\",\n        \"@oot_crates_no_std__nb-1.1.0//:nb\",\n        \"@oot_crates_no_std__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n        \"@oot_crates_no_std__panic-halt-1.0.0//:panic_halt\",\n        \"@oot_crates_no_std__proposed-traits-0.1.0//:proposed_traits\",\n        \"@oot_crates_no_std__zerocopy-0.8.47//:zerocopy\",\n    ],\n    proc_macro_deps = [\n        \"@oot_crates_no_std__paste-1.0.15//:paste\",\n    ],\n    aliases = {\n        \"@oot_crates_no_std__embedded-hal-1.0.0-alpha.1//:embedded_hal\": \"embedded_hal_old\",\n    },\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=aspeed-ddk\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.1.0\",\n)\n\ncargo_build_script(\n    name = \"_bs\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \"**/*.rs\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n    ],\n    crate_name = \"build_script_build\",\n    crate_root = \"build.rs\",\n    data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    link_deps = [\n        \"@oot_crates_no_std__cortex-m-0.7.7//:cortex_m\",\n        \"@oot_crates_no_std__cortex-m-rt-0.7.5//:cortex_m_rt\",\n    ],\n    edition = \"2021\",\n    pkg_name = \"aspeed-ddk\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=aspeed-ddk\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    version = \"0.1.0\",\n    visibility = [\"//visibility:private\"],\n)\n\nalias(\n    name = \"build_script_build\",\n    actual = \":_bs\",\n    tags = [\"manual\"],\n)\n",
+              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"aspeed_ddk\",\n    deps = [\n        \"@oot_crates_no_std__ast1060-pac-0.1.0//:ast1060_pac\",\n        \"@oot_crates_no_std__bitflags-2.11.0//:bitflags\",\n        \"@oot_crates_no_std__cortex-m-0.7.7//:cortex_m\",\n        \"@oot_crates_no_std__critical-section-1.2.0//:critical_section\",\n        \"@oot_crates_no_std__embedded-hal-1.0.0//:embedded_hal\",\n        \"@oot_crates_no_std__embedded-hal-1.0.0-alpha.1//:embedded_hal\",\n        \"@oot_crates_no_std__embedded-io-0.6.1//:embedded_io\",\n        \"@oot_crates_no_std__fugit-0.3.9//:fugit\",\n        \"@oot_crates_no_std__heapless-0.8.0//:heapless\",\n        \"@oot_crates_no_std__hex-literal-0.4.1//:hex_literal\",\n        \"@oot_crates_no_std__nb-1.1.0//:nb\",\n        \"@oot_crates_no_std__openprot-hal-blocking-0.1.0//:openprot_hal_blocking\",\n        \"@oot_crates_no_std__proposed-traits-0.1.0//:proposed_traits\",\n        \"@oot_crates_no_std__static_cell-2.1.1//:static_cell\",\n        \"@oot_crates_no_std__zerocopy-0.8.47//:zerocopy\",\n    ],\n    proc_macro_deps = [\n        \"@oot_crates_no_std__paste-1.0.15//:paste\",\n    ],\n    aliases = {\n        \"@oot_crates_no_std__embedded-hal-1.0.0-alpha.1//:embedded_hal\": \"embedded_hal_old\",\n    },\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=aspeed-ddk\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.1.0\",\n)\n",
               "strip_prefix": "",
-              "commit": "e93e85b0fff8a448a86c6a81bbbf1818ea6094e6"
+              "commit": "ce3b5677b95bc98a61ebf8783d00d93a910c4495"
             }
           },
           "oot_crates_no_std__ast1060-pac-0.1.0": {
@@ -4211,7 +4211,7 @@
                 "https://static.crates.io/crates/cortex-m/0.7.7/download"
               ],
               "strip_prefix": "cortex-m-0.7.7",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\n    \"@rules_rust//cargo:defs.bzl\",\n    \"cargo_build_script\",\n    \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"cortex_m\",\n    deps = [\n        \"@oot_crates_no_std__bare-metal-0.2.5//:bare_metal\",\n        \"@oot_crates_no_std__bitfield-0.13.2//:bitfield\",\n        \"@oot_crates_no_std__cortex-m-0.7.7//:build_script_build\",\n        \"@oot_crates_no_std__embedded-hal-0.2.7//:embedded_hal\",\n        \"@oot_crates_no_std__volatile-register-0.2.2//:volatile_register\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2018\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=cortex-m\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.7.7\",\n)\n\ncargo_build_script(\n    name = \"_bs\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \"**/*.rs\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_name = \"build_script_build\",\n    crate_root = \"build.rs\",\n    data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    edition = \"2018\",\n    links = \"cortex-m\",\n    pkg_name = \"cortex-m\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=cortex-m\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    version = \"0.7.7\",\n    visibility = [\"//visibility:private\"],\n)\n\nalias(\n    name = \"build_script_build\",\n    actual = \":_bs\",\n    tags = [\"manual\"],\n)\n"
+              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\n    \"@rules_rust//cargo:defs.bzl\",\n    \"cargo_build_script\",\n    \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"cortex_m\",\n    deps = [\n        \"@oot_crates_no_std__bare-metal-0.2.5//:bare_metal\",\n        \"@oot_crates_no_std__bitfield-0.13.2//:bitfield\",\n        \"@oot_crates_no_std__cortex-m-0.7.7//:build_script_build\",\n        \"@oot_crates_no_std__critical-section-1.2.0//:critical_section\",\n        \"@oot_crates_no_std__embedded-hal-0.2.7//:embedded_hal\",\n        \"@oot_crates_no_std__volatile-register-0.2.2//:volatile_register\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"critical-section\",\n        \"critical-section-single-core\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2018\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=cortex-m\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.7.7\",\n)\n\ncargo_build_script(\n    name = \"_bs\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \"**/*.rs\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"critical-section\",\n        \"critical-section-single-core\",\n    ],\n    crate_name = \"build_script_build\",\n    crate_root = \"build.rs\",\n    data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    edition = \"2018\",\n    links = \"cortex-m\",\n    pkg_name = \"cortex-m\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=cortex-m\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    version = \"0.7.7\",\n    visibility = [\"//visibility:private\"],\n)\n\nalias(\n    name = \"build_script_build\",\n    actual = \":_bs\",\n    tags = [\"manual\"],\n)\n"
             }
           },
           "oot_crates_no_std__cortex-m-rt-0.7.5": {
@@ -4310,6 +4310,22 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"crc_catalog\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2018\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=crc-catalog\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"2.4.0\",\n)\n"
             }
           },
+          "oot_crates_no_std__critical-section-1.2.0": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "patch_args": [],
+              "patch_tool": "",
+              "patches": [],
+              "remote_patch_strip": 1,
+              "sha256": "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b",
+              "type": "tar.gz",
+              "urls": [
+                "https://static.crates.io/crates/critical-section/1.2.0/download"
+              ],
+              "strip_prefix": "critical-section-1.2.0",
+              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"critical_section\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"restore-state-bool\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2018\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=critical-section\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"1.2.0\",\n)\n"
+            }
+          },
           "oot_crates_no_std__crypto-bigint-0.5.5": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
@@ -4892,22 +4908,6 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"p384\",\n    deps = [\n        \"@oot_crates_no_std__ecdsa-0.16.9//:ecdsa\",\n        \"@oot_crates_no_std__elliptic-curve-0.13.8//:elliptic_curve\",\n        \"@oot_crates_no_std__primeorder-0.13.6//:primeorder\",\n        \"@oot_crates_no_std__sha2-0.10.9//:sha2\",\n    ],\n    aliases = {\n        \"@oot_crates_no_std__ecdsa-0.16.9//:ecdsa\": \"ecdsa_core\",\n    },\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"arithmetic\",\n        \"digest\",\n        \"ecdsa\",\n        \"ecdsa-core\",\n        \"sha2\",\n        \"sha384\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=p384\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.13.1\",\n)\n"
             }
           },
-          "oot_crates_no_std__panic-halt-1.0.0": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "patch_args": [],
-              "patch_tool": "",
-              "patches": [],
-              "remote_patch_strip": 1,
-              "sha256": "a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11",
-              "type": "tar.gz",
-              "urls": [
-                "https://static.crates.io/crates/panic-halt/1.0.0/download"
-              ],
-              "strip_prefix": "panic-halt-1.0.0",
-              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"panic_halt\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=panic-halt\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"1.0.0\",\n)\n"
-            }
-          },
           "oot_crates_no_std__paste-1.0.15": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
@@ -4940,6 +4940,22 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"polyval\",\n    deps = [\n        \"@oot_crates_no_std__cfg-if-1.0.4//:cfg_if\",\n        \"@oot_crates_no_std__opaque-debug-0.3.1//:opaque_debug\",\n        \"@oot_crates_no_std__universal-hash-0.5.1//:universal_hash\",\n    ] + select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n            \"@oot_crates_no_std__cpufeatures-0.2.17//:cpufeatures\",  # cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))\n        ],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n            \"@oot_crates_no_std__cpufeatures-0.2.17//:cpufeatures\",  # cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))\n        ],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [\n            \"@oot_crates_no_std__cpufeatures-0.2.17//:cpufeatures\",  # cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))\n        ],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n            \"@oot_crates_no_std__cpufeatures-0.2.17//:cpufeatures\",  # cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))\n        ],\n        \"//conditions:default\": [],\n    }),\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=polyval\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"0.6.2\",\n)\n"
             }
           },
+          "oot_crates_no_std__portable-atomic-1.13.1": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "patch_args": [],
+              "patch_tool": "",
+              "patches": [],
+              "remote_patch_strip": 1,
+              "sha256": "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49",
+              "type": "tar.gz",
+              "urls": [
+                "https://static.crates.io/crates/portable-atomic/1.13.1/download"
+              ],
+              "strip_prefix": "portable-atomic-1.13.1",
+              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\n    \"@rules_rust//cargo:defs.bzl\",\n    \"cargo_build_script\",\n    \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"portable_atomic\",\n    deps = [\n        \"@oot_crates_no_std__portable-atomic-1.13.1//:build_script_build\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n        \"fallback\",\n    ],\n    crate_root = \"src/lib.rs\",\n    edition = \"2018\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=portable-atomic\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"1.13.1\",\n)\n\ncargo_build_script(\n    name = \"_bs\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \"**/*.rs\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_features = [\n        \"default\",\n        \"fallback\",\n    ],\n    crate_name = \"build_script_build\",\n    crate_root = \"build.rs\",\n    data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    edition = \"2018\",\n    pkg_name = \"portable-atomic\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=portable-atomic\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    version = \"1.13.1\",\n    visibility = [\"//visibility:private\"],\n)\n\nalias(\n    name = \"build_script_build\",\n    actual = \":_bs\",\n    tags = [\"manual\"],\n)\n"
+            }
+          },
           "oot_crates_no_std__ppv-lite86-0.2.21": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
@@ -5224,6 +5240,22 @@
               "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"stable_deref_trait\",\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2015\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=stable_deref_trait\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"1.2.1\",\n)\n"
             }
           },
+          "oot_crates_no_std__static_cell-2.1.1": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "patch_args": [],
+              "patch_tool": "",
+              "patches": [],
+              "remote_patch_strip": 1,
+              "sha256": "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23",
+              "type": "tar.gz",
+              "urls": [
+                "https://static.crates.io/crates/static_cell/2.1.1/download"
+              ],
+              "strip_prefix": "static_cell-2.1.1",
+              "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n#     bazel mod show_repo 'opentitan_pigweed'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n    name = \"cargo_toml_env_vars\",\n    src = \"Cargo.toml\",\n)\n\nrust_library(\n    name = \"static_cell\",\n    deps = [\n        \"@oot_crates_no_std__portable-atomic-1.13.1//:portable_atomic\",\n    ],\n    compile_data = glob(\n        allow_empty = True,\n        include = [\"**\"],\n        exclude = [\n            \"**/* *\",\n            \".tmp_git_root/**/*\",\n            \"BUILD\",\n            \"BUILD.bazel\",\n            \"WORKSPACE\",\n            \"WORKSPACE.bazel\",\n        ],\n    ),\n    crate_root = \"src/lib.rs\",\n    edition = \"2021\",\n    rustc_env_files = [\n        \":cargo_toml_env_vars\",\n    ],\n    rustc_flags = [\n        \"--cap-lints=allow\",\n    ],\n    srcs = glob(\n        allow_empty = True,\n        include = [\"**/*.rs\"],\n    ),\n    tags = [\n        \"cargo-bazel\",\n        \"crate-name=static_cell\",\n        \"manual\",\n        \"noclippy\",\n        \"norustfmt\",\n    ],\n    target_compatible_with = select({\n        \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n        \"@rules_rust//rust/platform:riscv32imc-unknown-none-elf\": [],\n        \"@rules_rust//rust/platform:thumbv6m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7em-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv7m-none-eabi\": [],\n        \"@rules_rust//rust/platform:thumbv8m.main-none-eabi\": [],\n        \"@rules_rust//rust/platform:x86_64-apple-darwin\": [],\n        \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n        \"//conditions:default\": [\"@platforms//:incompatible\"],\n    }),\n    version = \"2.1.1\",\n)\n"
+            }
+          },
           "oot_crates_no_std__subtle-2.6.1": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
             "attributes": {
diff --git a/services/i2c/backend-aspeed/src/lib.rs b/services/i2c/backend-aspeed/src/lib.rs
index 01e2de3..381f938 100644
--- a/services/i2c/backend-aspeed/src/lib.rs
+++ b/services/i2c/backend-aspeed/src/lib.rs
@@ -39,24 +39,45 @@
 
 #![no_std]
 
-use aspeed_ddk::i2c_core::{Ast1060I2c, Controller as DdkController, I2cConfig, I2cError, SlaveConfig, SlaveEvent};
+use aspeed_ddk::common::DmaBuffer;
+use aspeed_ddk::i2c_core;
+use aspeed_ddk::i2c_core::{Ast1060I2c, Controller as DdkController, I2cConfig, I2cError, I2cSpeed, I2cXferMode, ClockConfig, SlaveConfig, SlaveEvent};
 use i2c_api::{ResponseCode, SlaveEventKind};
 
 use pw_log;
 
 // ---------------------------------------------------------------------------
-// I2C Slave Command Register Constants
+// DMA Buffer
 // ---------------------------------------------------------------------------
-// These are copied from aspeed_ddk::i2c_core::constants which is private.
 
-/// Enable slave packet mode
-const AST_I2CS_PKT_MODE_EN: u32 = 1 << 16;
-/// Slave active for all addresses
-const AST_I2CS_ACTIVE_ALL: u32 = 0x3 << 17;
-/// Enable slave RX buffer
-const AST_I2CS_RX_BUFF_EN: u32 = 1 << 7;
-/// Enable slave TX buffer
-const AST_I2CS_TX_BUFF_EN: u32 = 1 << 6;
+/// DMA buffers in non-cached RAM section (0xA0000+).
+///
+/// One buffer per bus. Each buffer is shared between RX and TX operations
+/// on that bus, but cannot be shared across buses. Must be in `.ram_nc`
+/// section with cache exclusion configured by the kernel's `pre_init()`.
+///
+/// Currently allocated for 1 bus. Expand array size when adding more buses.
+#[unsafe(link_section = ".ram_nc")]
+static mut DMA_BUFS: [DmaBuffer<256>; 1] = [DmaBuffer::new()];
+
+// ---------------------------------------------------------------------------
+// Config
+// ---------------------------------------------------------------------------
+
+/// I2C configuration for DMA mode.
+///
+/// All buses use the same configuration: Standard speed (100kHz), DMA mode,
+/// multi-master support, SMBus timeout enabled.
+fn dma_config() -> I2cConfig {
+    I2cConfig {
+        speed: I2cSpeed::Standard,
+        xfer_mode: I2cXferMode::DmaMode,
+        multi_master: true,
+        smbus_timeout: true,
+        smbus_alert: false,
+        clock_config: ClockConfig::ast1060_default(),
+    }
+}
 
 // ---------------------------------------------------------------------------
 // Error mapping
@@ -147,6 +168,8 @@
     initialized: u16,
     /// Tracks which buses have slave mode configured via `configure_slave()`.
     slave_configured: u16,
+    /// Slave addresses for each bus (7-bit), used to restore config after master operations.
+    slave_addrs: [u8; 14],
     /// Pre-loaded TX data to send when master reads from us (one buffer per bus).
     slave_tx_bufs: [[u8; SLAVE_TX_BUF_SIZE]; 14],
     /// Valid byte count in each `slave_tx_bufs` slot.
@@ -169,6 +192,7 @@
             peripherals: unsafe { ast1060_pac::Peripherals::steal() },
             initialized: 0,
             slave_configured: 0,
+            slave_addrs: [0u8; 14],
             slave_tx_bufs: [[0u8; SLAVE_TX_BUF_SIZE]; 14],
             slave_tx_lens: [0usize; 14],
             slave_notification: [EMPTY_NOTIF_STATE; 14],
@@ -198,14 +222,26 @@
             registers: regs,
             buff_registers: buffs,
         };
-        // Ast1060I2c::new() calls init_hardware() which configures:
-        //   - I2CC00: reset, master enable, bus auto-release
+
+        // Map bus to DMA buffer index
+        // Currently only bus 2 is supported (index 0 in DMA_BUFS array)
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+
+        // Get DMA buffer reference for this bus
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
+        // Initialize with DMA - this calls init_hardware() which configures:
+        //   - I2CC00: reset, master enable, bus auto-release, DMA mode
         //   - Timing registers per I2cConfig
         //   - I2CM10/I2CM14: interrupt enable/clear
-        let _i2c = Ast1060I2c::new(&ctrl, I2cConfig::default())
+        //   - DMA buffer address registers
+        let _i2c = Ast1060I2c::new_with_dma(&ctrl, dma_config(), dma_buf)
             .map_err(map_i2c_error)?;
         self.initialized |= 1 << bus;
-        pw_log::info!("I2C bus {} controller initialized", bus as u32);
+        pw_log::info!("I2C bus {} controller initialized in DMA mode", bus as u32);
         Ok(())
     }
 
@@ -270,6 +306,13 @@
             return Err(ResponseCode::ServerError);
         }
 
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         // If slave mode is enabled, temporarily disable it for master operation
         let slave_was_enabled = (self.slave_configured & (1 << bus)) != 0;
         if slave_was_enabled {
@@ -280,7 +323,7 @@
                 registers: regs,
                 buff_registers: buffs,
             };
-            let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+            let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
             i2c.disable_slave();
 
             // Explicitly ensure master mode is enabled after disabling slave
@@ -305,7 +348,7 @@
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
 
         // TODO: Add bus turnaround delay for MCTP-over-I2C
         // Remote device needs time to switch from master to slave mode
@@ -315,15 +358,24 @@
 
         // Re-enable slave mode if it was enabled before
         if slave_was_enabled {
-            pw_log::debug!("Re-enabling slave mode after master write");
+            pw_log::debug!("Re-configuring slave mode after master write");
             let (regs, buffs) = self.controller_regs(bus)?;
             let ctrl = aspeed_ddk::i2c_core::I2cController {
                 controller: DdkController(bus),
                 registers: regs,
                 buff_registers: buffs,
             };
-            let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
-            i2c.enable_slave();
+            let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
+
+            // Reconfigure slave completely (not just enable) to restore:
+            // - AST_I2CC_SLAVE_EN
+            // - AST_I2CC_SLAVE_PKT_SAVE_ADDR (critical for MCTP PEC)
+            // - DMA buffer arming
+            let addr = self.slave_addrs[bus as usize];
+            let config = SlaveConfig::new(addr).map_err(map_i2c_error)?;
+            i2c.configure_slave(&config).map_err(map_i2c_error)?;
+
+            pw_log::debug!("Slave mode reconfigured at address 0x{:02x}", addr as u32);
         }
 
         if let Err(e) = result {
@@ -340,13 +392,20 @@
         if !self.is_bus_initialized(bus) {
             return Err(ResponseCode::ServerError);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
         i2c.read(addr, buf).map_err(map_i2c_error)
     }
 
@@ -361,13 +420,20 @@
         if !self.is_bus_initialized(bus) {
             return Err(ResponseCode::ServerError);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
         i2c.write_read(addr, wr, rd).map_err(map_i2c_error)
     }
 
@@ -376,13 +442,20 @@
         if !self.is_bus_initialized(bus) {
             return Err(ResponseCode::ServerError);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
         i2c.recover_bus().map_err(map_i2c_error)
     }
 
@@ -398,16 +471,24 @@
         if !self.is_bus_initialized(bus) {
             return Err(ResponseCode::ServerError);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
         let config = SlaveConfig::new(addr).map_err(map_i2c_error)?;
         i2c.configure_slave(&config).map_err(map_i2c_error)?;
         self.slave_configured |= 1 << bus;
+        self.slave_addrs[bus as usize] = addr;  // Save for reconfiguration after master operations
         pw_log::info!("I2C bus {} slave configured at address 0x{:02x}", bus as u32, addr as u32);
         Ok(())
     }
@@ -420,13 +501,20 @@
         if (self.slave_configured & (1 << bus)) == 0 {
             return Err(ResponseCode::NotInitialized);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
         i2c.enable_slave();
         pw_log::info!("I2C bus {} slave enabled", bus as u32);
         Ok(())
@@ -437,13 +525,20 @@
         if !self.is_bus_initialized(bus) {
             return Err(ResponseCode::ServerError);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
         i2c.disable_slave();
         pw_log::info!("I2C bus {} slave disabled", bus as u32);
         Ok(())
@@ -491,9 +586,9 @@
                 // ARM TX BUFFER: Set both RX_BUFF_EN and TX_BUFF_EN to enable simultaneous
                 // receive (for writes) and transmit (for reads). This is required for the
                 // slave to respond to reads without delay.
-                let mut cmd = AST_I2CS_ACTIVE_ALL | AST_I2CS_PKT_MODE_EN;
-                cmd |= AST_I2CS_RX_BUFF_EN;  // Keep RX enabled for writes
-                cmd |= AST_I2CS_TX_BUFF_EN;  // Arm TX for immediate read response
+                let mut cmd = i2c_core::AST_I2CS_ACTIVE_ALL | i2c_core::AST_I2CS_PKT_MODE_EN;
+                cmd |= i2c_core::AST_I2CS_RX_BUFF_EN;  // Keep RX enabled for writes
+                cmd |= i2c_core::AST_I2CS_TX_BUFF_EN;  // Arm TX for immediate read response
                 regs.i2cs28().write(|w| w.bits(cmd));
             }
         }
@@ -508,8 +603,8 @@
         let (regs, _) = self.controller_regs(bus)?;
 
         unsafe {
-            let mut cmd = AST_I2CS_ACTIVE_ALL | AST_I2CS_PKT_MODE_EN;
-            cmd |= AST_I2CS_RX_BUFF_EN;
+            let mut cmd = i2c_core::AST_I2CS_ACTIVE_ALL | i2c_core::AST_I2CS_PKT_MODE_EN;
+            cmd |= i2c_core::AST_I2CS_RX_BUFF_EN;
             regs.i2cs28().write(|w| w.bits(cmd));
         }
 
@@ -537,6 +632,13 @@
             return Err(ResponseCode::NotInitialized);
         }
 
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         // Copy TX buffer to local stack before borrowing peripherals.
         let tx_len = self.slave_tx_lens[bus as usize];
         let mut tx_local = [0u8; SLAVE_TX_BUF_SIZE];
@@ -548,7 +650,7 @@
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
 
         const POLL_BUDGET: usize = 10_000;
         for _ in 0..POLL_BUDGET {
@@ -573,6 +675,11 @@
                     let n = i2c.slave_read(rx_buf).map_err(map_i2c_error)?;
                     return Ok((SlaveEventKind::DataReceived, n));
                 }
+                Some(SlaveEvent::DataReceivedAndSent { rx_len: _, tx_len: _ }) => {
+                    // Both RX and TX occurred. Read the received data and return it.
+                    let n = i2c.slave_read(rx_buf).map_err(map_i2c_error)?;
+                    return Ok((SlaveEventKind::DataReceived, n));
+                }
                 Some(SlaveEvent::Stop) => {
                     return Ok((SlaveEventKind::Stop, 0));
                 }
@@ -597,13 +704,20 @@
         if (self.slave_configured & (1 << bus)) == 0 {
             return Err(ResponseCode::NotInitialized);
         }
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
 
         // Polling loop — spins until a relevant event or budget exhausted.
         // At 200 MHz, ~10_000 iterations ≈ a few hundred microseconds.
@@ -616,6 +730,11 @@
                     let n = i2c.slave_read(buf).map_err(map_i2c_error)?;
                     return Ok(n);
                 }
+                Some(SlaveEvent::DataReceivedAndSent { rx_len: _, tx_len: _ }) => {
+                    // Both RX and TX occurred. Read the received data.
+                    let n = i2c.slave_read(buf).map_err(map_i2c_error)?;
+                    return Ok(n);
+                }
                 Some(SlaveEvent::Stop) => {
                     // Stop without data (e.g. probe or zero-length write).
                     return Ok(0);
@@ -700,13 +819,20 @@
             return Err(ResponseCode::NotInitialized);
         }
 
+        // Get DMA buffer for this bus
+        let dma_idx = match bus {
+            2 => 0,
+            _ => return Err(ResponseCode::InvalidBus),
+        };
+        let dma_buf = unsafe { &mut *core::ptr::addr_of_mut!(DMA_BUFS[dma_idx].buf) };
+
         let (regs, buffs) = self.controller_regs(bus)?;
         let ctrl = aspeed_ddk::i2c_core::I2cController {
             controller: DdkController(bus),
             registers: regs,
             buff_registers: buffs,
         };
-        let mut i2c = Ast1060I2c::from_initialized(&ctrl, I2cConfig::default());
+        let mut i2c = Ast1060I2c::from_initialized_with_dma(&ctrl, dma_config(), dma_buf);
 
         // Use a local stack buffer so we can release the peripheral borrow
         // before writing into self.slave_notification.
diff --git a/services/i2c/server/src/main.rs b/services/i2c/server/src/main.rs
index 5eb309b..dd2267f 100644
--- a/services/i2c/server/src/main.rs
+++ b/services/i2c/server/src/main.rs
@@ -320,11 +320,20 @@
                         encode_success(response, 0)
                     }
                     Ok(n) => {
-                        pw_log::info!(
-                            "slave_receive bus={}: received {} bytes",
-                            header.bus as u32,
-                            n as u32,
-                        );
+                        if n > 0 {
+                            pw_log::info!(
+                                "slave_receive bus={}: received {} bytes, first_byte=0x{:02x}",
+                                header.bus as u32,
+                                n as u32,
+                                buf[0] as u32,
+                            );
+                        } else {
+                            pw_log::info!(
+                                "slave_receive bus={}: received {} bytes",
+                                header.bus as u32,
+                                n as u32,
+                            );
+                        }
                         encode_success(response, n)
                     }
                     Err(ResponseCode::Timeout) => encode_success(response, 0),
diff --git a/services/mctp/server/src/main.rs b/services/mctp/server/src/main.rs
index fd90dc3..77127ac 100644
--- a/services/mctp/server/src/main.rs
+++ b/services/mctp/server/src/main.rs
@@ -616,77 +616,51 @@
                 for msg in msgs.get(..n).unwrap_or(&[]) {
                     let raw = msg.data();
 
-                    // WORKAROUND: Manually prepend destination address to I2C frame.
-                    // The I2C hardware currently does NOT prepend the destination address,
-                    // but mctp-lib's I2C decoder expects it. This will be fixed when the
-                    // I2C driver is updated to prepend the destination address automatically.
-                    // TODO: Remove this workaround once I2C driver change is in place.
-                    let mut frame_with_dest = [0u8; 256];
-                    if raw.len() + 1 > frame_with_dest.len() {
-                        pw_log::warn!(
-                            "I2C frame too large ({} bytes), skipping",
-                            raw.len() as u32,
-                        );
-                        continue;
-                    }
-
-                    // Prepend destination address (OWN_I2C_ADDR << 1 | 0 for write)
-                    frame_with_dest[0] = OWN_I2C_ADDR << 1;
-                    frame_with_dest[1..raw.len() + 1].copy_from_slice(raw);
-                    let frame_len = raw.len() + 1;
-
-                    // Log the frame AFTER prepending destination
-                    // Format: dest_addr cmd byte_count src_addr | MCTP hdr[0..3]
-                    if frame_len >= 9 {
+                    // Log the received I2C frame
+                    // Format: cmd byte_count src_addr | MCTP hdr[0..3]
+                    if raw.len() >= 8 {
                         pw_log::info!(
-                            "I2C frame (with prepended dest): dest=0x{:02x} cmd=0x{:02x} bc={} src=0x{:02x} \
+                            "I2C frame: cmd=0x{:02x} bc={} src=0x{:02x} \
                             | mctp: ver=0x{:02x} deid=0x{:02x} seid=0x{:02x} flags=0x{:02x} \
                             len={}",
-                            frame_with_dest[0] as u32, frame_with_dest[1] as u32,
-                            frame_with_dest[2] as u32, frame_with_dest[3] as u32,
-                            frame_with_dest[4] as u32, frame_with_dest[5] as u32,
-                            frame_with_dest[6] as u32, frame_with_dest[7] as u32,
-                            frame_len as u32,
+                            raw[0] as u32, raw[1] as u32,
+                            raw[2] as u32, raw[3] as u32,
+                            raw[4] as u32, raw[5] as u32,
+                            raw[6] as u32, raw.len() as u32,
                         );
                     } else {
                         pw_log::warn!(
                             "I2C frame too short ({} bytes) to contain MCTP header",
-                            frame_len as u32,
+                            raw.len() as u32,
                         );
                     }
 
-                    // Create temporary TargetMessage with prepended destination
-                    let msg_with_dest = i2c_api::TargetMessage::from_data(
-                        msg.source_address,
-                        &frame_with_dest[..frame_len]
-                    );
-
                     // Debug: log full frame being decoded
-                    if frame_len >= 14 {
+                    if raw.len() >= 13 {
                         pw_log::info!(
                             "Frame[0-7]:  {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x}",
-                            frame_with_dest[0] as u32, frame_with_dest[1] as u32,
-                            frame_with_dest[2] as u32, frame_with_dest[3] as u32,
-                            frame_with_dest[4] as u32, frame_with_dest[5] as u32,
-                            frame_with_dest[6] as u32, frame_with_dest[7] as u32
+                            raw[0] as u32, raw[1] as u32,
+                            raw[2] as u32, raw[3] as u32,
+                            raw[4] as u32, raw[5] as u32,
+                            raw[6] as u32, raw[7] as u32
                         );
                         pw_log::info!(
-                            "Frame[8-13]: {:02x} {:02x} {:02x} {:02x} {:02x} {:02x}",
-                            frame_with_dest[8] as u32, frame_with_dest[9] as u32,
-                            frame_with_dest[10] as u32, frame_with_dest[11] as u32,
-                            frame_with_dest[12] as u32, frame_with_dest[13] as u32
+                            "Frame[8-12]: {:02x} {:02x} {:02x} {:02x} {:02x}",
+                            raw[8] as u32, raw[9] as u32,
+                            raw[10] as u32, raw[11] as u32,
+                            raw[12] as u32
                         );
-                    } else if frame_len >= 8 {
+                    } else if raw.len() >= 8 {
                         pw_log::info!(
                             "Frame bytes: {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x} {:02x}",
-                            frame_with_dest[0] as u32, frame_with_dest[1] as u32,
-                            frame_with_dest[2] as u32, frame_with_dest[3] as u32,
-                            frame_with_dest[4] as u32, frame_with_dest[5] as u32,
-                            frame_with_dest[6] as u32, frame_with_dest[7] as u32
+                            raw[0] as u32, raw[1] as u32,
+                            raw[2] as u32, raw[3] as u32,
+                            raw[4] as u32, raw[5] as u32,
+                            raw[6] as u32, raw[7] as u32
                         );
                     }
 
-                    match receiver.decode(&msg_with_dest) {
+                    match receiver.decode(msg) {
                         Ok((pkt, hdr)) => {
                             i2c_pkt = i2c_pkt.wrapping_add(1);
                             // Log MCTP packet fields: SOM/EOM from flags byte (pkt[3])
diff --git a/target/ast1060-evb/entry.rs b/target/ast1060-evb/entry.rs
index ea9dee9..e4c008f 100644
--- a/target/ast1060-evb/entry.rs
+++ b/target/ast1060-evb/entry.rs
@@ -7,39 +7,80 @@
 
 use arch_arm_cortex_m::Arch;
 
-#[cfg(feature = "jtag-halt")]
-use core::ptr::{self, addr_of};
+use core::ptr::{self, addr_of, write_volatile};
+
+/// Configure cache to exclude non-cached RAM region for DMA buffers.
+///
+/// The AST1060 cache controller (SCUA50) uses 24KB granularity per bit.
+/// Setting bits 0-25 caches 0x00000-0x9BFFF (624KB), leaving 0x9C000+
+/// uncached for DMA buffers. This minimizes waste compared to the
+/// aspeed-ddk reference (which uses bits 0-19, wasting 160KB).
+///
+/// # Safety
+///
+/// Must be called from pre_init before RAM is initialized.
+unsafe fn configure_cache() {
+    // Cache controller registers (SCU base = 0x7e6e_2000)
+    const CACHE_CTRL: u32 = 0x7e6e_2a58;  // SCUA58: Function Control
+    const CACHE_AREA: u32 = 0x7e6e_2a50;  // SCUA50: Cacheable Area (24KB/bit)
+    const CACHE_INVAL: u32 = 0x7e6e_2a54; // SCUA54: Invalidation Control
+
+    // SAFETY: Called from pre_init before RAM initialization.
+    // These registers control the cache controller and must be configured
+    // before DMA operations to prevent cache coherency issues.
+    unsafe {
+        // Disable cache
+        write_volatile(CACHE_CTRL as *mut u32, 0);
+
+        // Configure cache area: bits 0-25 set = 26 × 24KB = 624KB cached
+        // Covers 0x00000 - 0x9BFFF (cached), leaves 0x9C000+ uncached
+        // This wastes only 16KB vs aspeed-ddk's 160KB waste
+        write_volatile(CACHE_AREA as *mut u32, 0x03ff_ffff);
+
+        // Invalidate cache
+        write_volatile(CACHE_INVAL as *mut u32, 0x81e0_0000);
+
+        // Re-enable cache
+        write_volatile(CACHE_CTRL as *mut u32, 1);
+    }
+}
 
 /// Pre-kernel hardware initialization
 /// Runs before RAM is initialized, before main()
-#[cfg(feature = "jtag-halt")]
 #[cortex_m_rt::pre_init]
 unsafe fn pre_kernel_init() {
-    // Enable JTAG pins via SCU pinmux - must happen very early
-    // Scu::steal() is safe here: it's a zero-sized type with no RAM allocation
-    let scu = unsafe { ast1060_pac::Scu::steal() };
+    // SAFETY: Called once at boot before RAM initialization.
+    // Configure cache to exclude RAM_NC region (0xA0000+) for DMA buffers
+    unsafe { configure_cache(); }
 
-    // SCU41C: Multi-function Pin Control - enable ARM JTAG pins
-    scu.scu41c().modify(|_, w| {
-        w.enbl_armtmsfn_pin()
-            .bit(true)
-            .enbl_armtckfn_pin()
-            .bit(true)
-            .enbl_armtrstfn_pin()
-            .bit(true)
-            .enbl_armtdifn_pin()
-            .bit(true)
-            .enbl_armtdofn_pin()
-            .bit(true)
-    });
+    #[cfg(feature = "jtag-halt")]
+    {
+        // Enable JTAG pins via SCU pinmux - must happen very early
+        // Scu::steal() is safe here: it's a zero-sized type with no RAM allocation
+        let scu = unsafe { ast1060_pac::Scu::steal() };
 
-    // Halt here waiting for JTAG debugger
-    // Break with JTAG and set HALT to 0 to continue
-    static mut HALT: u32 = 1;
-    loop {
-        let val = unsafe { ptr::read_volatile(addr_of!(HALT)) };
-        if val == 0 {
-            break;
+        // SCU41C: Multi-function Pin Control - enable ARM JTAG pins
+        scu.scu41c().modify(|_, w| {
+            w.enbl_armtmsfn_pin()
+                .bit(true)
+                .enbl_armtckfn_pin()
+                .bit(true)
+                .enbl_armtrstfn_pin()
+                .bit(true)
+                .enbl_armtdifn_pin()
+                .bit(true)
+                .enbl_armtdofn_pin()
+                .bit(true)
+        });
+
+        // Halt here waiting for JTAG debugger
+        // Break with JTAG and set HALT to 0 to continue
+        static mut HALT: u32 = 1;
+        loop {
+            let val = unsafe { ptr::read_volatile(addr_of!(HALT)) };
+            if val == 0 {
+                break;
+            }
         }
     }
 }
@@ -74,7 +115,7 @@
     i3c, i3c1, i3c2, i3c3,
     scu, sgpiom,
     spi, spi1, spipf1, spipf2, spipf3,
-    timer1, timer2, timer3, timer4, timer5, timer6, timer7,
+    timer, timer1, timer2, timer3, timer4, timer5, timer6, timer7,
     uart, uartdma, wdt
 );
 
diff --git a/target/ast1060-evb/target.ld.tmpl b/target/ast1060-evb/target.ld.tmpl
index db25c4f..603ee9e 100644
--- a/target/ast1060-evb/target.ld.tmpl
+++ b/target/ast1060-evb/target.ld.tmpl
@@ -44,6 +44,10 @@
   /* Internal SRAM */
   RAM(rwx) : ORIGIN = {{kernel.ram_start_address | hex}},
              LENGTH = {{kernel.ram_size_bytes}}
+  /* Non-cached RAM for DMA buffers (cache granularity = 24KB)
+   * Bit 26 of SCUA50 covers 0x9C000-0xA1FFF; we leave it clear for DMA.
+   * Total uncached: 144KB (0x9C000-0xBFFFF) */
+  RAM_NC(rwx) : ORIGIN = 0x0009C000, LENGTH = 144K
 
   /* Each memory region above has an associated .*.unused_space section that
    * overlays the unused space at the end of the memory segment. These segments
@@ -222,6 +226,24 @@
     . = ABSOLUTE(ORIGIN(RAM) + LENGTH(RAM));
   } >RAM
 
+  /* Non-cached RAM section for DMA buffers.
+   * This section is excluded from cache via SCUA50 configuration in pre_init().
+   * Cache granularity is 24KB per bit; bit 26 (0x9C000-0xA1FFF) and above
+   * are left clear, making this entire region uncached for DMA coherency.
+   */
+  .ram_nc (NOLOAD) : ALIGN(32)
+  {
+    __ram_nc_start = .;
+    KEEP(*(.ram_nc));
+    __ram_nc_end = .;
+  } >RAM_NC
+
+  /* Represents unused space in the RAM_NC segment. */
+  .RAM_NC.unused_space (NOLOAD) : ALIGN(4)
+  {
+    . = ABSOLUTE(ORIGIN(RAM_NC) + LENGTH(RAM_NC));
+  } >RAM_NC
+
   /* Discard unwind info. */
   .ARM.extab 0x0 (INFO) :
   {
diff --git a/third_party/aspeed_ddk.bzl b/third_party/aspeed_ddk.bzl
index f43b610..44e4cdc 100644
--- a/third_party/aspeed_ddk.bzl
+++ b/third_party/aspeed_ddk.bzl
@@ -8,7 +8,7 @@
     git_repository(
         name = "aspeed_ddk",
         remote = "https://github.com/OpenPRoT/aspeed-rust.git",
-        branch = "i2c-core",
+        branch = "main",
         build_file = "@@//third_party:aspeed_ddk.BUILD.bazel",
     )
     return module_ctx.extension_metadata(
diff --git a/third_party/crates_io/crates_no_std/Cargo.lock b/third_party/crates_io/crates_no_std/Cargo.lock
index 5f9b889..58fbd0a 100644
--- a/third_party/crates_io/crates_no_std/Cargo.lock
+++ b/third_party/crates_io/crates_no_std/Cargo.lock
@@ -40,12 +40,12 @@
 [[package]]
 name = "aspeed-ddk"
 version = "0.1.0"
-source = "git+https://github.com/OpenPRoT/aspeed-rust.git?branch=i2c-core#e93e85b0fff8a448a86c6a81bbbf1818ea6094e6"
+source = "git+https://github.com/OpenPRoT/aspeed-rust.git?branch=main#ce3b5677b95bc98a61ebf8783d00d93a910c4495"
 dependencies = [
  "ast1060-pac 0.1.0 (git+https://github.com/OpenPRoT/ast1060-pac.git?branch=main)",
  "bitflags",
  "cortex-m",
- "cortex-m-rt",
+ "critical-section",
  "embedded-hal 1.0.0",
  "embedded-hal 1.0.0-alpha.1",
  "embedded-io",
@@ -54,9 +54,9 @@
  "hex-literal",
  "nb 1.1.0",
  "openprot-hal-blocking",
- "panic-halt",
  "paste",
  "proposed-traits",
+ "static_cell",
  "zerocopy",
 ]
 
@@ -168,6 +168,7 @@
 dependencies = [
  "bare-metal",
  "bitfield 0.13.2",
+ "critical-section",
  "embedded-hal 0.2.7",
  "volatile-register",
 ]
@@ -261,6 +262,12 @@
 checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
 
 [[package]]
+name = "critical-section"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
+[[package]]
 name = "crypto-bigint"
 version = "0.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -605,12 +612,6 @@
 ]
 
 [[package]]
-name = "panic-halt"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a513e167849a384b7f9b746e517604398518590a9142f4846a32e3c2a4de7b11"
-
-[[package]]
 name = "paste"
 version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -629,6 +630,12 @@
 ]
 
 [[package]]
+name = "portable-atomic"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
+
+[[package]]
 name = "ppv-lite86"
 version = "0.2.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -791,6 +798,15 @@
 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
 
 [[package]]
+name = "static_cell"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
 name = "subtle"
 version = "2.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/third_party/crates_io/crates_no_std/Cargo.toml b/third_party/crates_io/crates_no_std/Cargo.toml
index 03ca186..dbcedb0 100644
--- a/third_party/crates_io/crates_no_std/Cargo.toml
+++ b/third_party/crates_io/crates_no_std/Cargo.toml
@@ -14,7 +14,7 @@
 [dependencies]
 # AST1060-specific crates - use @oot_crates_no_std// for these
 ast1060-pac = { git = "https://github.com/stevenlee7189/ast1060-pac", branch = "main" }
-aspeed-ddk = { git = "https://github.com/OpenPRoT/aspeed-rust.git", branch = "i2c-core" }
+aspeed-ddk = { git = "https://github.com/OpenPRoT/aspeed-rust.git", branch = "main" }
 embedded-hal = "1.0.0"
 embedded-io = "0.6.1"
 # cortex-m crates needed for consistent linking (avoid duplicate symbols)