From 0160a85d5680aa69f3ed9c82a851af6bddf6768f Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Wed, 26 Aug 2026 23:20:41 +1000 Subject: [PATCH] Add --pd-debug to control EC PD debug logging Uses the new EC_CMD_PD_DEBUG_CONTROL (0x3E2D) host command to toggle the verbose PD message logging and UCSI command tracing that could previously only be enabled with the cypdctl EC console command. The log output goes to the EC console, read it with --console follow. > framework_tool --pd-debug status PD debug logging: Verbose: false UCSI: false UCSI tunnel disabled: false > framework_tool --pd-debug verbose > framework_tool --console follow Signed-off-by: Daniel Schaefer --- framework_lib/src/chromium_ec/command.rs | 2 + framework_lib/src/chromium_ec/commands.rs | 28 ++++++++++++ framework_lib/src/chromium_ec/mod.rs | 8 ++++ framework_lib/src/commandline/clap_std.rs | 8 +++- framework_lib/src/commandline/mod.rs | 45 +++++++++++++++++++ framework_lib/src/commandline/uefi.rs | 30 ++++++++++++- .../completions/bash/framework_tool | 6 ++- .../completions/fish/framework_tool.fish | 5 +++ .../completions/zsh/_framework_tool | 1 + framework_tool/framework_tool.1 | 21 ++++++++- 10 files changed, 150 insertions(+), 4 deletions(-) diff --git a/framework_lib/src/chromium_ec/command.rs b/framework_lib/src/chromium_ec/command.rs index ea608b7..87a693f 100644 --- a/framework_lib/src/chromium_ec/command.rs +++ b/framework_lib/src/chromium_ec/command.rs @@ -127,6 +127,8 @@ pub enum EcCommands { GetPdPortState = 0x3E23, /// Read board ID of specific ADC channel ReadBoardId = 0x3E26, + /// Control PD debug logging, the output goes to the EC console + PdDebugControl = 0x3E2D, } pub trait EcRequest { diff --git a/framework_lib/src/chromium_ec/commands.rs b/framework_lib/src/chromium_ec/commands.rs index 900383b..e20df38 100644 --- a/framework_lib/src/chromium_ec/commands.rs +++ b/framework_lib/src/chromium_ec/commands.rs @@ -1999,3 +1999,31 @@ impl EcRequest for EcRequestGetApThrottleStatus { EcCommands::GetApThrottleStatus } } + +/// Verbose PD message logging (cypdctl verbose) +pub const PD_DEBUG_VERBOSE_MSG: u8 = 0x01; +/// UCSI command tracing (cypdctl ucsi) +pub const PD_DEBUG_UCSI: u8 = 0x02; +/// Disable the UCSI tunnel (cypdctl ucsitun 0) +pub const PD_DEBUG_UCSI_TUNNEL_DISABLE: u8 = 0x04; + +#[repr(C, packed)] +pub struct EcRequestPdDebugControl { + /// Which PD_DEBUG_* flags to modify; 0 = pure read, nothing changed + pub set_mask: u8, + /// New values for the flags selected in set_mask + pub flags: u8, +} + +#[repr(C, packed)] +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct EcResponsePdDebugControl { + /// Current flag values, after any modification + pub flags: u8, +} + +impl EcRequest for EcRequestPdDebugControl { + fn command_id() -> EcCommands { + EcCommands::PdDebugControl + } +} diff --git a/framework_lib/src/chromium_ec/mod.rs b/framework_lib/src/chromium_ec/mod.rs index ce067d7..5628dae 100644 --- a/framework_lib/src/chromium_ec/mod.rs +++ b/framework_lib/src/chromium_ec/mod.rs @@ -863,6 +863,14 @@ impl CrosEc { } } + /// Get or set PD debug logging flags (see PD_DEBUG_* constants) + /// set_mask selects which flags to change, 0 reads without changing. + /// Returns the current flags. The log output goes to the EC console. + pub fn pd_debug_control(&self, set_mask: u8, flags: u8) -> EcResult { + let res = EcRequestPdDebugControl { set_mask, flags }.send_command(self)?; + Ok(res.flags) + } + /// Set tablet mode pub fn set_tablet_mode(&self, mode: TabletModeOverride) { let mode = mode as u8; diff --git a/framework_lib/src/commandline/clap_std.rs b/framework_lib/src/commandline/clap_std.rs index 615d6bf..9fe3309 100644 --- a/framework_lib/src/commandline/clap_std.rs +++ b/framework_lib/src/commandline/clap_std.rs @@ -16,7 +16,7 @@ use crate::chromium_ec::commands::SetGpuSerialMagic; use crate::chromium_ec::CrosEcDriverType; use crate::commandline::{ Cli, ClickForceArg, ConsoleArg, FpBrightnessArg, HardwareDeviceType, InputDeckModeArg, - LogLevel, RebootEcArg, TabletModeArg, + LogLevel, PdDebugArg, RebootEcArg, TabletModeArg, }; /// Swiss army knife for Framework laptops @@ -129,6 +129,11 @@ struct ClapCli { #[arg(long)] pd_enable: Option, + /// Get or set PD debug logging, read the output via --console + #[clap(value_enum)] + #[arg(long)] + pd_debug: Option, + /// Show details about connected DP or HDMI Expansion Cards #[arg(long)] dp_hdmi_info: bool, @@ -655,6 +660,7 @@ pub fn parse(args: &[String]) -> Cli { pd_reset: args.pd_reset, pd_disable: args.pd_disable, pd_enable: args.pd_enable, + pd_debug: args.pd_debug, dp_hdmi_info: args.dp_hdmi_info, dp_hdmi_update: args .dp_hdmi_update diff --git a/framework_lib/src/commandline/mod.rs b/framework_lib/src/commandline/mod.rs index 4147762..97e0afb 100644 --- a/framework_lib/src/commandline/mod.rs +++ b/framework_lib/src/commandline/mod.rs @@ -42,6 +42,9 @@ use crate::chromium_ec::commands::RebootEcCmd; use crate::chromium_ec::commands::RgbS; use crate::chromium_ec::commands::TabletModeOverride; use crate::chromium_ec::commands::EC_PROTOCOL_INFO_IN_PROGRESS_SUPPORTED; +use crate::chromium_ec::commands::{ + PD_DEBUG_UCSI, PD_DEBUG_UCSI_TUNNEL_DISABLE, PD_DEBUG_VERBOSE_MSG, +}; use crate::chromium_ec::commands::{PORT_80_EVENT_RESET, PORT_80_EVENT_RESUME}; use crate::chromium_ec::EcResponseStatus; use crate::chromium_ec::Port80History; @@ -99,6 +102,16 @@ pub enum ConsoleArg { Follow, } +#[cfg_attr(not(feature = "uefi"), derive(clap::ValueEnum))] +#[derive(Clone, Debug, PartialEq)] +pub enum PdDebugArg { + Status, + Off, + Verbose, + Ucsi, + All, +} + #[cfg_attr(not(feature = "uefi"), derive(clap::ValueEnum))] #[derive(Clone, Debug, PartialEq)] pub enum RebootEcArg { @@ -207,6 +220,7 @@ pub struct Cli { pub pd_reset: Option, pub pd_disable: Option, pub pd_enable: Option, + pub pd_debug: Option, pub dp_hdmi_info: bool, pub dp_hdmi_update: Option, pub audio_card_info: bool, @@ -308,6 +322,7 @@ pub fn parse(args: &[String]) -> Cli { // pd_reset // pd_disable // pd_enable + // pd_debug dp_hdmi_info: cli.dp_hdmi_info, // dp_hdmi_update audio_card_info: cli.audio_card_info, @@ -1777,6 +1792,35 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 { Ok(()) } }); + } else if let Some(pd_debug) = &args.pd_debug { + let (set_mask, flags) = match pd_debug { + PdDebugArg::Status => (0, 0), + PdDebugArg::Off => (PD_DEBUG_VERBOSE_MSG | PD_DEBUG_UCSI, 0), + PdDebugArg::Verbose => (PD_DEBUG_VERBOSE_MSG, PD_DEBUG_VERBOSE_MSG), + PdDebugArg::Ucsi => (PD_DEBUG_UCSI, PD_DEBUG_UCSI), + PdDebugArg::All => ( + PD_DEBUG_VERBOSE_MSG | PD_DEBUG_UCSI, + PD_DEBUG_VERBOSE_MSG | PD_DEBUG_UCSI, + ), + }; + match ec.pd_debug_control(set_mask, flags) { + Ok(cur) => { + println!("PD debug logging:"); + println!( + " Verbose: {}", + cur & PD_DEBUG_VERBOSE_MSG != 0 + ); + println!(" UCSI: {}", cur & PD_DEBUG_UCSI != 0); + println!( + " UCSI tunnel disabled: {}", + cur & PD_DEBUG_UCSI_TUNNEL_DISABLE != 0 + ); + if cur & (PD_DEBUG_VERBOSE_MSG | PD_DEBUG_UCSI) != 0 { + println!("Read the log output with --console follow"); + } + } + Err(err) => println!("Failed to control PD debug logging: {:?}", err), + } } else if args.dp_hdmi_info { #[cfg(feature = "hidapi")] print_dp_hdmi_details(true); @@ -2104,6 +2148,7 @@ Options: Set the color of a key to RGB. Multiple colors for adjacent keys can be set at once --tablet-mode Set tablet mode override [possible values: auto, tablet, laptop] --console Get EC console, choose whether recent or to follow the output [possible values: recent, follow] + --pd-debug Get or set PD debug logging, read it via --console [possible values: status, off, verbose, ucsi, all] --hash Hash a file of arbitrary data --flash-gpu-descriptor <18 DIGIT SN> Overwrite the GPU bay descriptor SN and type. --flash-gpu-descriptor-file Write the GPU bay descriptor with a descriptor file. diff --git a/framework_lib/src/commandline/uefi.rs b/framework_lib/src/commandline/uefi.rs index 929673d..e051bea 100644 --- a/framework_lib/src/commandline/uefi.rs +++ b/framework_lib/src/commandline/uefi.rs @@ -11,7 +11,9 @@ use crate::chromium_ec::commands::SetGpuSerialMagic; use crate::chromium_ec::{CrosEcDriverType, HardwareDeviceType}; use crate::commandline::{Cli, LogLevel}; -use super::{ConsoleArg, FpBrightnessArg, InputDeckModeArg, RebootEcArg, TabletModeArg}; +use super::{ + ConsoleArg, FpBrightnessArg, InputDeckModeArg, PdDebugArg, RebootEcArg, TabletModeArg, +}; /// Get commandline arguments from UEFI environment pub fn get_args() -> Vec { @@ -55,6 +57,7 @@ pub fn parse(args: &[String]) -> Cli { pd_reset: None, pd_disable: None, pd_enable: None, + pd_debug: None, dp_hdmi_info: false, dp_hdmi_update: None, audio_card_info: false, @@ -662,6 +665,31 @@ pub fn parse(args: &[String]) -> Cli { None }; found_an_option = true; + } else if arg == "--pd-debug" { + cli.pd_debug = if args.len() > i + 1 { + let pd_debug_arg = &args[i + 1]; + if pd_debug_arg == "status" { + Some(PdDebugArg::Status) + } else if pd_debug_arg == "off" { + Some(PdDebugArg::Off) + } else if pd_debug_arg == "verbose" { + Some(PdDebugArg::Verbose) + } else if pd_debug_arg == "ucsi" { + Some(PdDebugArg::Ucsi) + } else if pd_debug_arg == "all" { + Some(PdDebugArg::All) + } else { + println!( + "Invalid value for --pd-debug: '{}'. Must be one of 'status', 'off', 'verbose', 'ucsi', 'all'.", + pd_debug_arg + ); + None + } + } else { + println!("--pd-debug requires specifying the mode"); + None + }; + found_an_option = true; } else if arg == "--privacy" { cli.privacy = true; found_an_option = true; diff --git a/framework_tool/completions/bash/framework_tool b/framework_tool/completions/bash/framework_tool index 518b31a..2528c27 100755 --- a/framework_tool/completions/bash/framework_tool +++ b/framework_tool/completions/bash/framework_tool @@ -23,7 +23,7 @@ _framework_tool() { case "${cmd}" in framework_tool) - opts="-v -q -t -f -h --flash-gpu-descriptor --verbose --quiet --versions --version --features --esrt --device --compare-version --power --smartbattery --smartbattery-auth --thermal --thermalget --thermalset --sensors --fansetduty --fansetrpm --autofanctrl --pdports --pdports-chromebook --info --meinfo --pd-info --pd-reset --pd-disable --pd-enable --dp-hdmi-info --dp-hdmi-update --audio-card-info --privacy --pd-bin --ec-bin --capsule --dump --h2o-capsule --dump-ec-flash --flash-full-ec --flash-ec --flash-ro-ec --flash-rw-ec --intrusion --inputdeck --inputdeck-mode --expansion-bay --charge-limit --charge-current-limit --charge-rate-limit --get-gpio --fp-led-level --fp-brightness --kblight --remap-key --rgbkbd --ps2-enable --tablet-mode --touchscreen-enable --haptic-intensity --click-force --stylus-battery --console --reboot-ec --ec-hib-delay --sysinfo --uptimeinfo --s0ix-counter --hello --protoinfo --switches --port80read --panicinfo --hash --driver --pd-addrs --pd-ports --test --test-retimer --boardid --force --dry-run --flash-gpu-descriptor-file --dump-gpu-descriptor-file --validate-gpu-descriptor-file --nvidia --host-command --generate-completions --generate-manpage --help" + opts="-v -q -t -f -h --flash-gpu-descriptor --verbose --quiet --versions --version --features --esrt --device --compare-version --power --smartbattery --smartbattery-auth --thermal --thermalget --thermalset --sensors --fansetduty --fansetrpm --autofanctrl --pdports --pdports-chromebook --info --meinfo --pd-info --pd-reset --pd-disable --pd-enable --pd-debug --dp-hdmi-info --dp-hdmi-update --audio-card-info --privacy --pd-bin --ec-bin --capsule --dump --h2o-capsule --dump-ec-flash --flash-full-ec --flash-ec --flash-ro-ec --flash-rw-ec --intrusion --inputdeck --inputdeck-mode --expansion-bay --charge-limit --charge-current-limit --charge-rate-limit --get-gpio --fp-led-level --fp-brightness --kblight --remap-key --rgbkbd --ps2-enable --tablet-mode --touchscreen-enable --haptic-intensity --click-force --stylus-battery --console --reboot-ec --ec-hib-delay --sysinfo --uptimeinfo --s0ix-counter --hello --protoinfo --switches --port80read --panicinfo --hash --driver --pd-addrs --pd-ports --test --test-retimer --boardid --force --dry-run --flash-gpu-descriptor-file --dump-gpu-descriptor-file --validate-gpu-descriptor-file --nvidia --host-command --generate-completions --generate-manpage --help" if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 @@ -77,6 +77,10 @@ _framework_tool() { COMPREPLY=($(compgen -f "${cur}")) return 0 ;; + --pd-debug) + COMPREPLY=($(compgen -W "status off verbose ucsi all" -- "${cur}")) + return 0 + ;; --dp-hdmi-update) COMPREPLY=($(compgen -f "${cur}")) return 0 diff --git a/framework_tool/completions/fish/framework_tool.fish b/framework_tool/completions/fish/framework_tool.fish index b46a6cb..b16d1e8 100644 --- a/framework_tool/completions/fish/framework_tool.fish +++ b/framework_tool/completions/fish/framework_tool.fish @@ -17,6 +17,11 @@ complete -c framework_tool -l meinfo -d 'Show Intel ME information (from SMBIOS complete -c framework_tool -l pd-reset -d 'Reset a specific PD controller (for debugging only)' -r complete -c framework_tool -l pd-disable -d 'Disable all ports on a specific PD controller (for debugging only)' -r complete -c framework_tool -l pd-enable -d 'Enable all ports on a specific PD controller (for debugging only)' -r +complete -c framework_tool -l pd-debug -d 'Get or set PD debug logging, read the output via --console' -r -f -a "status\t'' +off\t'' +verbose\t'' +ucsi\t'' +all\t''" complete -c framework_tool -l dp-hdmi-update -d 'Update the DisplayPort or HDMI Expansion Card' -r -F complete -c framework_tool -l pd-bin -d 'Parse versions from PD firmware binary file' -r -F complete -c framework_tool -l ec-bin -d 'Parse versions from EC firmware binary file' -r -F diff --git a/framework_tool/completions/zsh/_framework_tool b/framework_tool/completions/zsh/_framework_tool index 1495920..5ad3a36 100644 --- a/framework_tool/completions/zsh/_framework_tool +++ b/framework_tool/completions/zsh/_framework_tool @@ -27,6 +27,7 @@ _framework_tool() { '--pd-reset=[Reset a specific PD controller (for debugging only)]:PD_RESET:_default' \ '--pd-disable=[Disable all ports on a specific PD controller (for debugging only)]:PD_DISABLE:_default' \ '--pd-enable=[Enable all ports on a specific PD controller (for debugging only)]:PD_ENABLE:_default' \ +'--pd-debug=[Get or set PD debug logging, read the output via --console]:PD_DEBUG:(status off verbose ucsi all)' \ '--dp-hdmi-update=[Update the DisplayPort or HDMI Expansion Card]:UPDATE_BIN:_files' \ '--pd-bin=[Parse versions from PD firmware binary file]:PD_BIN:_files' \ '--ec-bin=[Parse versions from EC firmware binary file]:EC_BIN:_files' \ diff --git a/framework_tool/framework_tool.1 b/framework_tool/framework_tool.1 index aaf135d..6a7d641 100644 --- a/framework_tool/framework_tool.1 +++ b/framework_tool/framework_tool.1 @@ -8,7 +8,7 @@ framework_tool \- Swiss army knife for Framework laptops .ie \n(.g .ds Aq \(aq .el .ds Aq ' .SH SYNOPSIS -\fBframework_tool\fR [\fB\-\-flash\-gpu\-descriptor\fR] [\fB\-v\fR|\fB\-\-verbose\fR]... [\fB\-q\fR|\fB\-\-quiet\fR]... [\fB\-\-versions\fR] [\fB\-\-version\fR] [\fB\-\-features\fR] [\fB\-\-esrt\fR] [\fB\-\-device\fR] [\fB\-\-compare\-version\fR] [\fB\-\-power\fR] [\fB\-\-smartbattery\fR] [\fB\-\-smartbattery\-auth\fR] [\fB\-\-thermal\fR] [\fB\-\-thermalget\fR] [\fB\-\-thermalset\fR] [\fB\-\-sensors\fR] [\fB\-\-fansetduty\fR] [\fB\-\-fansetrpm\fR] [\fB\-\-autofanctrl\fR] [\fB\-\-pdports\fR] [\fB\-\-pdports\-chromebook\fR] [\fB\-\-info\fR] [\fB\-\-meinfo\fR] [\fB\-\-pd\-info\fR] [\fB\-\-pd\-reset\fR] [\fB\-\-pd\-disable\fR] [\fB\-\-pd\-enable\fR] [\fB\-\-dp\-hdmi\-info\fR] [\fB\-\-dp\-hdmi\-update\fR] [\fB\-\-audio\-card\-info\fR] [\fB\-\-privacy\fR] [\fB\-\-pd\-bin\fR] [\fB\-\-ec\-bin\fR] [\fB\-\-capsule\fR] [\fB\-\-dump\fR] [\fB\-\-h2o\-capsule\fR] [\fB\-\-dump\-ec\-flash\fR] [\fB\-\-flash\-full\-ec\fR] [\fB\-\-flash\-ec\fR] [\fB\-\-flash\-ro\-ec\fR] [\fB\-\-flash\-rw\-ec\fR] [\fB\-\-intrusion\fR] [\fB\-\-inputdeck\fR] [\fB\-\-inputdeck\-mode\fR] [\fB\-\-expansion\-bay\fR] [\fB\-\-charge\-limit\fR] [\fB\-\-charge\-current\-limit\fR] [\fB\-\-charge\-rate\-limit\fR] [\fB\-\-get\-gpio\fR] [\fB\-\-fp\-led\-level\fR] [\fB\-\-fp\-brightness\fR] [\fB\-\-kblight\fR] [\fB\-\-remap\-key\fR] [\fB\-\-rgbkbd\fR] [\fB\-\-tablet\-mode\fR] [\fB\-\-touchscreen\-enable\fR] [\fB\-\-haptic\-intensity\fR] [\fB\-\-click\-force\fR] [\fB\-\-stylus\-battery\fR] [\fB\-\-console\fR] [\fB\-\-reboot\-ec\fR] [\fB\-\-ec\-hib\-delay\fR] [\fB\-\-sysinfo\fR] [\fB\-\-uptimeinfo\fR] [\fB\-\-s0ix\-counter\fR] [\fB\-\-hello\fR] [\fB\-\-protoinfo\fR] [\fB\-\-switches\fR] [\fB\-\-port80read\fR] [\fB\-\-panicinfo\fR] [\fB\-\-hash\fR] [\fB\-\-driver\fR] [\fB\-\-pd\-addrs\fR] [\fB\-\-pd\-ports\fR] [\fB\-t\fR|\fB\-\-test\fR] [\fB\-\-test\-retimer\fR] [\fB\-\-boardid\fR] [\fB\-f\fR|\fB\-\-force\fR] [\fB\-\-dry\-run\fR] [\fB\-\-flash\-gpu\-descriptor\-file\fR] [\fB\-\-dump\-gpu\-descriptor\-file\fR] [\fB\-\-validate\-gpu\-descriptor\-file\fR] [\fB\-\-nvidia\fR] [\fB\-\-host\-command\fR] [\fB\-h\fR|\fB\-\-help\fR] +\fBframework_tool\fR [\fB\-\-flash\-gpu\-descriptor\fR] [\fB\-v\fR|\fB\-\-verbose\fR]... [\fB\-q\fR|\fB\-\-quiet\fR]... [\fB\-\-versions\fR] [\fB\-\-version\fR] [\fB\-\-features\fR] [\fB\-\-esrt\fR] [\fB\-\-device\fR] [\fB\-\-compare\-version\fR] [\fB\-\-power\fR] [\fB\-\-smartbattery\fR] [\fB\-\-smartbattery\-auth\fR] [\fB\-\-thermal\fR] [\fB\-\-thermalget\fR] [\fB\-\-thermalset\fR] [\fB\-\-sensors\fR] [\fB\-\-fansetduty\fR] [\fB\-\-fansetrpm\fR] [\fB\-\-autofanctrl\fR] [\fB\-\-pdports\fR] [\fB\-\-pdports\-chromebook\fR] [\fB\-\-info\fR] [\fB\-\-meinfo\fR] [\fB\-\-pd\-info\fR] [\fB\-\-pd\-reset\fR] [\fB\-\-pd\-disable\fR] [\fB\-\-pd\-enable\fR] [\fB\-\-pd\-debug\fR] [\fB\-\-dp\-hdmi\-info\fR] [\fB\-\-dp\-hdmi\-update\fR] [\fB\-\-audio\-card\-info\fR] [\fB\-\-privacy\fR] [\fB\-\-pd\-bin\fR] [\fB\-\-ec\-bin\fR] [\fB\-\-capsule\fR] [\fB\-\-dump\fR] [\fB\-\-h2o\-capsule\fR] [\fB\-\-dump\-ec\-flash\fR] [\fB\-\-flash\-full\-ec\fR] [\fB\-\-flash\-ec\fR] [\fB\-\-flash\-ro\-ec\fR] [\fB\-\-flash\-rw\-ec\fR] [\fB\-\-intrusion\fR] [\fB\-\-inputdeck\fR] [\fB\-\-inputdeck\-mode\fR] [\fB\-\-expansion\-bay\fR] [\fB\-\-charge\-limit\fR] [\fB\-\-charge\-current\-limit\fR] [\fB\-\-charge\-rate\-limit\fR] [\fB\-\-get\-gpio\fR] [\fB\-\-fp\-led\-level\fR] [\fB\-\-fp\-brightness\fR] [\fB\-\-kblight\fR] [\fB\-\-remap\-key\fR] [\fB\-\-rgbkbd\fR] [\fB\-\-tablet\-mode\fR] [\fB\-\-touchscreen\-enable\fR] [\fB\-\-haptic\-intensity\fR] [\fB\-\-click\-force\fR] [\fB\-\-stylus\-battery\fR] [\fB\-\-console\fR] [\fB\-\-reboot\-ec\fR] [\fB\-\-ec\-hib\-delay\fR] [\fB\-\-sysinfo\fR] [\fB\-\-uptimeinfo\fR] [\fB\-\-s0ix\-counter\fR] [\fB\-\-hello\fR] [\fB\-\-protoinfo\fR] [\fB\-\-switches\fR] [\fB\-\-port80read\fR] [\fB\-\-panicinfo\fR] [\fB\-\-hash\fR] [\fB\-\-driver\fR] [\fB\-\-pd\-addrs\fR] [\fB\-\-pd\-ports\fR] [\fB\-t\fR|\fB\-\-test\fR] [\fB\-\-test\-retimer\fR] [\fB\-\-boardid\fR] [\fB\-f\fR|\fB\-\-force\fR] [\fB\-\-dry\-run\fR] [\fB\-\-flash\-gpu\-descriptor\-file\fR] [\fB\-\-dump\-gpu\-descriptor\-file\fR] [\fB\-\-validate\-gpu\-descriptor\-file\fR] [\fB\-\-nvidia\fR] [\fB\-\-host\-command\fR] [\fB\-h\fR|\fB\-\-help\fR] .ie \n(.g .ds Aq \(aq .el .ds Aq ' .SH DESCRIPTION @@ -124,6 +124,25 @@ Disable all ports on a specific PD controller (for debugging only) \fB\-\-pd\-enable\fR \fI\fR Enable all ports on a specific PD controller (for debugging only) .TP +\fB\-\-pd\-debug\fR \fI\fR +Get or set PD debug logging, read the output via \-\-console +.br + +.br +\fIPossible values:\fR +.RS 14 +.IP \(bu 2 +status +.IP \(bu 2 +off +.IP \(bu 2 +verbose +.IP \(bu 2 +ucsi +.IP \(bu 2 +all +.RE +.TP \fB\-\-dp\-hdmi\-info\fR Show details about connected DP or HDMI Expansion Cards .TP