[LTP] [PATCH v4] rfim: add new test for verifying RFIM sysfs interface

Andrea Cervesato andrea.cervesato@suse.com
Tue Jun 30 11:40:16 CEST 2026


Hi Piotr,

> +#include "tst_test.h"
> +
> +#define RFIM_ROOT "/sys/bus/pci/devices/0000:00:04.0"
> +
> +static bool have_dvfs, have_fivr, have_dlvr;
> +
> +static const char * const fivr_nodes[] = {
> +	RFIM_ROOT "/fivr/vco_ref_code_lo",
> +	RFIM_ROOT "/fivr/vco_ref_code_hi",
> +	RFIM_ROOT "/fivr/spread_spectrum_pct",
> +	RFIM_ROOT "/fivr/spread_spectrum_clk_enable",
> +	RFIM_ROOT "/fivr/rfi_vco_ref_code",
> +	RFIM_ROOT "/fivr/fivr_fffc_rev",
> +	NULL
> +};
> +
> +static const char * const ro_dvfs_nodes[] = {
> +	RFIM_ROOT "/dvfs/ddr_data_rate_point_0",
> +	RFIM_ROOT "/dvfs/ddr_data_rate_point_1",
> +	RFIM_ROOT "/dvfs/ddr_data_rate_point_2",
> +	RFIM_ROOT "/dvfs/ddr_data_rate_point_3",
> +	RFIM_ROOT "/dvfs/ddr_data_rate",
> +	NULL
> +};
> +
> +static const char * const ro_dlvr_nodes[] = {
> +	RFIM_ROOT "/dlvr/dlvr_hardware_rev",
> +	RFIM_ROOT "/dlvr/dlvr_freq_mhz",
> +	RFIM_ROOT "/dlvr/dlvr_pll_busy",
> +	NULL
> +};
> +
> +static const char * const rw_dlvr_nodes[] = {
> +	RFIM_ROOT "/dlvr/dlvr_freq_select",
> +	RFIM_ROOT "/dlvr/dlvr_rfim_enable",
> +	RFIM_ROOT "/dlvr/dlvr_spread_spectrum_pct",
> +	RFIM_ROOT "/dlvr/dlvr_control_mode",
> +	RFIM_ROOT "/dlvr/dlvr_control_lock",
> +	NULL
> +};
> +
> +static const char * const rw_dvfs_nodes[] = {
> +	RFIM_ROOT "/dvfs/rfi_restriction_run_busy",
> +	RFIM_ROOT "/dvfs/rfi_restriction_err_code",
> +	RFIM_ROOT "/dvfs/rfi_restriction_data_rate_base",
> +	RFIM_ROOT "/dvfs/rfi_restriction_data_rate",
> +	RFIM_ROOT "/dvfs/rfi_restriction",
> +	RFIM_ROOT "/dvfs/rfi_disable",
> +	NULL
> +};

I was thinking that we can make it easier now. Instead of verifying
RW on different functions, we can simply create a .tcase structure
where we assign to each sysfs patch a specific read or write flag.
And according to that, we simply make a check inside the run()
function.

static struct tcase {
	const char *path;
  int read;
  int write;
} tcases[] = {
  ...
};

static run(unsigned int i)
{
	static struct *tc = &tcases[i];

  if (tc->read && !tc->write) {
    /* open with read -> pass */
    /* open with write -> fail */
  } else if (!tc->read && tc->write) {
    /* open with read -> fail */
    /* open with write -> pass */
  } else if (tc->read && tc->write) {
    /* open with read/write -> pass */
  } else {
    /* TBROK */
  }
}

Something like this. Feel free to optimize it, it's just a draft.

Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com


More information about the ltp mailing list