]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soundwire: optimize sdw_dpn_prop
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Thu, 3 Oct 2024 07:06:43 +0000 (15:06 +0800)
committerVinod Koul <vkoul@kernel.org>
Thu, 3 Oct 2024 07:58:50 +0000 (13:28 +0530)
before:
struct sdw_dpn_prop {
u32                        num;                  /*     0     4 */
u32                        max_word;             /*     4     4 */
u32                        min_word;             /*     8     4 */
u32                        num_words;            /*    12     4 */
u32 *                      words;                /*    16     8 */
enum sdw_dpn_type          type;                 /*    24     4 */
u32                        max_grouping;         /*    28     4 */
bool                       simple_ch_prep_sm;    /*    32     1 */

/* XXX 3 bytes hole, try to pack */

u32                        ch_prep_timeout;      /*    36     4 */
u32                        imp_def_interrupts;   /*    40     4 */
u32                        max_ch;               /*    44     4 */
u32                        min_ch;               /*    48     4 */
u32                        num_channels;         /*    52     4 */
u32 *                      channels;             /*    56     8 */
/* --- cacheline 1 boundary (64 bytes) --- */
u32                        num_ch_combinations;  /*    64     4 */

/* XXX 4 bytes hole, try to pack */

u32 *                      ch_combinations;      /*    72     8 */
u32                        modes;                /*    80     4 */
u32                        max_async_buffer;     /*    84     4 */
bool                       block_pack_mode;      /*    88     1 */
bool                       read_only_wordlength; /*    89     1 */

/* XXX 2 bytes hole, try to pack */

u32                        port_encoding;        /*    92     4 */
struct sdw_dpn_audio_mode * audio_modes;         /*    96     8 */

/* size: 104, cachelines: 2, members: 22 */
/* sum members: 95, holes: 3, sum holes: 9 */
/* last cacheline: 40 bytes */
};

after:

struct sdw_dpn_prop {
struct sdw_dpn_audio_mode * audio_modes;         /*     0     8 */
u32                        num;                  /*     8     4 */
u32                        max_word;             /*    12     4 */
u32                        min_word;             /*    16     4 */
u32                        num_words;            /*    20     4 */
u32 *                      words;                /*    24     8 */
enum sdw_dpn_type          type;                 /*    32     4 */
u32                        max_grouping;         /*    36     4 */
u32                        ch_prep_timeout;      /*    40     4 */
u32                        imp_def_interrupts;   /*    44     4 */
u32                        max_ch;               /*    48     4 */
u32                        min_ch;               /*    52     4 */
u32                        num_channels;         /*    56     4 */
u32                        num_ch_combinations;  /*    60     4 */
/* --- cacheline 1 boundary (64 bytes) --- */
u32 *                      channels;             /*    64     8 */
u32 *                      ch_combinations;      /*    72     8 */
u32                        modes;                /*    80     4 */
u32                        max_async_buffer;     /*    84     4 */
u32                        port_encoding;        /*    88     4 */
bool                       block_pack_mode;      /*    92     1 */
bool                       read_only_wordlength; /*    93     1 */
bool                       simple_ch_prep_sm;    /*    94     1 */

/* size: 96, cachelines: 2, members: 22 */
/* padding: 1 */
/* last cacheline: 32 bytes */
};

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20241003070650.62787-8-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
include/linux/soundwire/sdw.h

index c72095137a35eae271c83d6b884f78735107df38..cc0afb8af3332baa3a2af5036dba44b1b6d9edcb 100644 (file)
@@ -288,6 +288,7 @@ struct sdw_dpn_audio_mode {
 
 /**
  * struct sdw_dpn_prop - Data Port DPn properties
+ * @audio_modes: Audio modes supported
  * @num: port number
  * @max_word: Maximum number of bits in a Payload Channel Sample, 1 to 64
  * (inclusive)
@@ -298,26 +299,26 @@ struct sdw_dpn_audio_mode {
  * @type: Data port type. Full, Simplified or Reduced
  * @max_grouping: Maximum number of samples that can be grouped together for
  * a full data port
- * @simple_ch_prep_sm: If the port supports simplified channel prepare state
- * machine
  * @ch_prep_timeout: Port-specific timeout value, in milliseconds
  * @imp_def_interrupts: If set, each bit corresponds to support for
  * implementation-defined interrupts
  * @max_ch: Maximum channels supported
  * @min_ch: Minimum channels supported
  * @num_channels: Number of discrete channels supported
- * @channels: Discrete channels supported
  * @num_ch_combinations: Number of channel combinations supported
+ * @channels: Discrete channels supported
  * @ch_combinations: Channel combinations supported
  * @modes: SDW mode supported
  * @max_async_buffer: Number of samples that this port can buffer in
  * asynchronous modes
+ * @port_encoding: Payload Channel Sample encoding schemes supported
  * @block_pack_mode: Type of block port mode supported
  * @read_only_wordlength: Read Only wordlength field in DPN_BlockCtrl1 register
- * @port_encoding: Payload Channel Sample encoding schemes supported
- * @audio_modes: Audio modes supported
+ * @simple_ch_prep_sm: If the port supports simplified channel prepare state
+ * machine
  */
 struct sdw_dpn_prop {
+       struct sdw_dpn_audio_mode *audio_modes;
        u32 num;
        u32 max_word;
        u32 min_word;
@@ -325,21 +326,20 @@ struct sdw_dpn_prop {
        u32 *words;
        enum sdw_dpn_type type;
        u32 max_grouping;
-       bool simple_ch_prep_sm;
        u32 ch_prep_timeout;
        u32 imp_def_interrupts;
        u32 max_ch;
        u32 min_ch;
        u32 num_channels;
-       u32 *channels;
        u32 num_ch_combinations;
+       u32 *channels;
        u32 *ch_combinations;
        u32 modes;
        u32 max_async_buffer;
+       u32 port_encoding;
        bool block_pack_mode;
        bool read_only_wordlength;
-       u32 port_encoding;
-       struct sdw_dpn_audio_mode *audio_modes;
+       bool simple_ch_prep_sm;
 };
 
 /**