ASoC: cs-amp-lib-test: Force test calibration blob entries to be valid
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Thu, 22 Aug 2024 11:57:25 +0000 (12:57 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 22 Aug 2024 12:42:40 +0000 (13:42 +0100)
For a normal calibration blob the calTarget values must be non-zero and
unique, and the calTime values must be non-zero. Don't rely on
get_random_bytes() to be random enough to guarantee this. Force the
calTarget and calTime values to be valid while retaining randomness
in the values.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Fixes: 177862317a98 ("ASoC: cs-amp-lib: Add KUnit test for calibration helpers")
Link: https://patch.msgid.link/20240822115725.259568-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs-amp-lib-test.c

index 15f991b2e16e2738ad1e6020ad2ddfa0c14cc2bb..8169ec88a8ba8be4c1be49283020ea644544a2fa 100644 (file)
@@ -38,6 +38,7 @@ static void cs_amp_lib_test_init_dummy_cal_blob(struct kunit *test, int num_amps
 {
        struct cs_amp_lib_test_priv *priv = test->priv;
        unsigned int blob_size;
+       int i;
 
        blob_size = offsetof(struct cirrus_amp_efi_data, data) +
                    sizeof(struct cirrus_amp_cal_data) * num_amps;
@@ -49,6 +50,14 @@ static void cs_amp_lib_test_init_dummy_cal_blob(struct kunit *test, int num_amps
        priv->cal_blob->count = num_amps;
 
        get_random_bytes(priv->cal_blob->data, sizeof(struct cirrus_amp_cal_data) * num_amps);
+
+       /* Ensure all timestamps are non-zero to mark the entry valid. */
+       for (i = 0; i < num_amps; i++)
+               priv->cal_blob->data[i].calTime[0] |= 1;
+
+       /* Ensure that all UIDs are non-zero and unique. */
+       for (i = 0; i < num_amps; i++)
+               *(u8 *)&priv->cal_blob->data[i].calTarget[0] = i + 1;
 }
 
 static u64 cs_amp_lib_test_get_target_uid(struct kunit *test)