spi: fsl-qspi: Optimize fsl_qspi struct
authorKevin Hao <haokexin@gmail.com>
Fri, 11 Apr 2025 07:06:41 +0000 (15:06 +0800)
committerMark Brown <broonie@kernel.org>
Sun, 13 Apr 2025 19:27:02 +0000 (20:27 +0100)
Reorgize the members of the fsl_qspi struct to:
  - Reduce a hole in the struct.
  - Group members required by each op (e.g., iobase, ahb_addr,
    devtype_data and lock) into the same cacheline.

Before:
struct fsl_qspi {
[...]

/* size: 176, cachelines: 3, members: 11 */
/* sum members: 168, holes: 1, sum holes: 4 */
/* padding: 4 */
/* member types with holes: 1, total: 1 */
/* last cacheline: 48 bytes */
};

after:
struct fsl_qspi {
void *                     iobase;               /*     0     8 */
void *                     ahb_addr;             /*     8     8 */
const struct fsl_qspi_devtype_data  * devtype_data; /*    16     8 */
struct mutex               lock;                 /*    24    32 */
struct completion          c;                    /*    56    32 */

/* XXX last struct has 1 hole */

/* --- cacheline 1 boundary (64 bytes) was 24 bytes ago --- */
struct clk *               clk;                  /*    88     8 */
struct clk *               clk_en;               /*    96     8 */
struct pm_qos_request      pm_qos_req;           /*   104    48 */
/* --- cacheline 2 boundary (128 bytes) was 24 bytes ago --- */
struct device *            dev;                  /*   152     8 */
int                        selected;             /*   160     4 */
u32                        memmap_phy;           /*   164     4 */

/* size: 168, cachelines: 3, members: 11 */
/* member types with holes: 1, total: 1 */
/* last cacheline: 40 bytes */
};

Reviewed-by: Han Xu <han.xu@nxp.com>
Signed-off-by: Kevin Hao <haokexin@gmail.com>
Link: https://patch.msgid.link/20250411-spi-v1-1-8d6dfb1a9262@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-fsl-qspi.c

index f879533535e853dac6bff22a3a5e87431a44a1d2..c887abb028d7758f574587707d8328c1c0aad42b 100644 (file)
@@ -264,14 +264,14 @@ static const struct fsl_qspi_devtype_data ls2080a_data = {
 struct fsl_qspi {
        void __iomem *iobase;
        void __iomem *ahb_addr;
-       u32 memmap_phy;
-       struct clk *clk, *clk_en;
-       struct device *dev;
-       struct completion c;
        const struct fsl_qspi_devtype_data *devtype_data;
        struct mutex lock;
+       struct completion c;
+       struct clk *clk, *clk_en;
        struct pm_qos_request pm_qos_req;
+       struct device *dev;
        int selected;
+       u32 memmap_phy;
 };
 
 static inline int needs_swap_endian(struct fsl_qspi *q)