blob: 71162f9d34c676b748ccc169c907e3a2607777f4 [file] [log] [blame]
Ed Tanous2b314e42025-08-19 15:46:18 -07001// SPDX-License-Identifier: Apache-2.0
Patrick Williams4a943522025-10-09 20:34:38 -04002// SPDX-FileCopyrightText: Copyright OpenBMC Authors
Ed Tanous2b314e42025-08-19 15:46:18 -07003
Marc Olberding1e17db52025-08-27 12:25:28 -07004#include "gpio.hpp"
5#include "i2c.hpp"
Marc Olberding801bc902025-08-27 12:55:42 -07006#include "nvidia.hpp"
Marc Olberding1e17db52025-08-27 12:25:28 -07007#include "utilities.hpp"
8
Ed Tanous2b314e42025-08-19 15:46:18 -07009#include <fcntl.h>
10#include <systemd/sd-daemon.h>
11
12#include <CLI/CLI.hpp>
13#include <gpiod.hpp>
14
Marc Olberding801bc902025-08-27 12:55:42 -070015#include <algorithm>
16#include <array>
Ed Tanous2b314e42025-08-19 15:46:18 -070017#include <iostream>
Marc Olberding801bc902025-08-27 12:55:42 -070018#include <string_view>
19#include <utility>
Ed Tanous2b314e42025-08-19 15:46:18 -070020
Marc Olberding5d50e522025-09-03 18:23:32 -070021constexpr std::array<std::pair<std::string_view, int (*)()>, 3> init_functions{
Marc Olberding801bc902025-08-27 12:55:42 -070022 {{"nvidia-gb200", nvidia::init_gb200_base},
Marc Olberding5d50e522025-09-03 18:23:32 -070023 {"nvidia-gb200-with-p2020", nvidia::init_gb200_with_p2020},
24 {"nvidia-nvl32", nvidia::init_nvl32}}};
Ed Tanous2b314e42025-08-19 15:46:18 -070025
26int main(int argc, char** argv)
27{
28 CLI::App app("Platform init CLI");
29
30 app.require_subcommand();
31
32 CLI::App* init_sub =
33 app.add_subcommand("init", "Initialize the platform and daemonize");
34 std::string platform_name;
35 init_sub
36 ->add_option("platform_name", platform_name,
37 "Name of the platform to init")
38 ->required();
39 app.require_subcommand();
40
41 CLI11_PARSE(app, argc, argv)
42
43 const auto* it = std::ranges::find_if(
44 init_functions,
45 [&platform_name](const std::pair<std::string_view, int (*)()> val) {
46 return val.first == platform_name;
47 });
48 if (it == init_functions.end())
49 {
50 std::cerr << init_sub->help() << "\n";
51 return EXIT_FAILURE;
52 }
53
54 return it->second();
55}