# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/zbi/kernel_cmdline.gni")

kernel_cmdline("serial-legacy") {
  args = [ "kernel.serial=legacy" ]
  deps = [ "//build/validate:non_production_tag" ]
}

kernel_cmdline("toulouse") {
  args = [
    # Fuchsia does not have a deterministic ordering for bringing up PCI devices, so the
    # /dev/class/ethernet/xxx paths have no well-defined mapping to the ports on the front of the
    # device.
    # In order for netbooting and loglistener to work, we need to let netsvc know which path corresponds
    # to the left-most ethernet port.
    "kernel.serial=legacy",
    "netsvc.interface=/dev/sys/pci/00:1f.6/e1000/ethernet",
  ]
}

kernel_cmdline("x64-reduced-perf-variation") {
  args = [
    # Disable Intel Turbo Boost. Turbo Boost provides a significant speed-up to
    # many workloads, but — because CPU frequencies vary based on previous work,
    # work in other cores, system temperature, etc — makes performance of systems
    # less predictable. We prefer stability in our performance comparison
    # benchmarks.
    "kernel.x86.turbo=false",

    # Set the Intel HWP performance profile to be "stable", trying to keep the
    # CPU clock rate stable. With turbo boost disabled, this has only a small
    # effect, but helps ensure that wake ups from idle are fixed.
    "kernel.x86.hwp_policy=stable-performance",

    # Disable hyper-threading. Hyper-threading reduces predictability of
    # benchmarks, because the performance of a thread is significantly affected
    # by other threads on the core.
    "kernel.smp.ht=false",

    # Disable spectre mitigations. Spectre mitigations have significant
    # performance impact, but are currently only carried out on a subset of the
    # NUC fleet. This means that different devices have significantly different
    # performance characteristics, meaning that benchmark results vary
    # significantly based on the device running it.
    #
    # TODO(fxbug.dev/33161): Ideally, we should load microcode during Zircon boot,
    # which should bring all devices to the same patch level, removing the
    # performance differences when spectre mitigations are in place.
    "kernel.x86.disable_spec_mitigations=true",

    # Disable page scanning in all its forms. Page scanning is intended to
    # provide a memory benefit to final systems, but the operation of the scanner
    # and its unpredictable de-duplication or eviction  of memory in use by
    # benchmarks could cause noticable variation.
    "kernel.page-scanner.start-at-boot=false",
    "kernel.page-scanner.zero-page-scans-per-second=0",
    "kernel.page-scanner.enable-eviction=false",
  ]
}

kernel_cmdline("gce") {
  args = [ "kernel.serial=legacy" ]
}

kernel_cmdline("vs680") {
  args = [ "kernel.bypass-debuglog=true" ]
}

kernel_cmdline("c18") {
  args = [ "kernel.bypass-debuglog=true" ]
}

kernel_cmdline("vim3") {
  args = [
    # Prefer using the built-in NIC to the CDC-ether interface.
    "netsvc.interface=/dev/dwmac/dwmac/Designware-MAC/ethernet",
  ]
}
