From: Sergey Khimich <[email protected]>
There are could be specific limitations for some mmc
controllers for preparing and setting cqhci transfer
descriptors. So add callback to allow implement
driver specific function.
Signed-off-by: Sergey Khimich <[email protected]>
---
drivers/mmc/host/cqhci-core.c | 5 +++++
drivers/mmc/host/cqhci.h | 3 +++
2 files changed, 8 insertions(+)
diff --git a/drivers/mmc/host/cqhci-core.c b/drivers/mmc/host/cqhci-core.c
index b3d7d6d8d654..22be6b0b32ca 100644
--- a/drivers/mmc/host/cqhci-core.c
+++ b/drivers/mmc/host/cqhci-core.c
@@ -516,6 +516,11 @@ static int cqhci_prep_tran_desc(struct mmc_request *mrq,
desc = get_trans_desc(cq_host, tag);
+ if (cq_host->ops->prep_tran_desc) {
+ cq_host->ops->prep_tran_desc(data, cq_host, desc, sg_count);
+ return 0;
+ }
+
for_each_sg(data->sg, sg, sg_count, i) {
addr = sg_dma_address(sg);
len = sg_dma_len(sg);
diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h
index 1a12e40a02e6..c473d8994ca4 100644
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -293,6 +293,9 @@ struct cqhci_host_ops {
int (*program_key)(struct cqhci_host *cq_host,
const union cqhci_crypto_cfg_entry *cfg, int slot);
#endif
+ void (*prep_tran_desc)(struct mmc_data *data, struct cqhci_host *cq_host,
+ u8 *desc, int sg_count);
+
};
static inline void cqhci_writel(struct cqhci_host *host, u32 val, int reg)
--
2.30.2
Hi Sergey,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on ulf-hansson-mmc-mirror/next v6.6-rc3 next-20230926]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Sergey-Khimich/mmc-cqhci-Add-cqhci_set_tran_desc-callback/20230926-170331
base: linus/master
patch link: https://lore.kernel.org/r/20230926090242.105020-2-serghox%40gmail.com
patch subject: [PATCH v2 1/2] mmc: cqhci: Add cqhci_set_tran_desc() callback
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20230927/[email protected]/config)
compiler: alpha-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230927/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All warnings (new ones prefixed by >>):
In file included from drivers/mmc/host/sdhci_am654.c:17:
>> drivers/mmc/host/cqhci.h:296:39: warning: 'struct mmc_data' declared inside parameter list will not be visible outside of this definition or declaration
296 | void (*prep_tran_desc)(struct mmc_data *data, struct cqhci_host *cq_host,
| ^~~~~~~~
vim +296 drivers/mmc/host/cqhci.h
281
282 struct cqhci_host_ops {
283 void (*dumpregs)(struct mmc_host *mmc);
284 void (*write_l)(struct cqhci_host *host, u32 val, int reg);
285 u32 (*read_l)(struct cqhci_host *host, int reg);
286 void (*enable)(struct mmc_host *mmc);
287 void (*disable)(struct mmc_host *mmc, bool recovery);
288 void (*update_dcmd_desc)(struct mmc_host *mmc, struct mmc_request *mrq,
289 u64 *data);
290 void (*pre_enable)(struct mmc_host *mmc);
291 void (*post_disable)(struct mmc_host *mmc);
292 #ifdef CONFIG_MMC_CRYPTO
293 int (*program_key)(struct cqhci_host *cq_host,
294 const union cqhci_crypto_cfg_entry *cfg, int slot);
295 #endif
> 296 void (*prep_tran_desc)(struct mmc_data *data, struct cqhci_host *cq_host,
297 u8 *desc, int sg_count);
298
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Sergey,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on ulf-hansson-mmc-mirror/next v6.6-rc3 next-20230929]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Sergey-Khimich/mmc-cqhci-Add-cqhci_set_tran_desc-callback/20230926-170331
base: linus/master
patch link: https://lore.kernel.org/r/20230926090242.105020-2-serghox%40gmail.com
patch subject: [PATCH v2 1/2] mmc: cqhci: Add cqhci_set_tran_desc() callback
config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20230930/[email protected]/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230930/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All warnings (new ones prefixed by >>):
In file included from drivers/mmc/host/sdhci_am654.c:9:
In file included from include/linux/iopoll.h:14:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:337:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from drivers/mmc/host/sdhci_am654.c:9:
In file included from include/linux/iopoll.h:14:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:337:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from drivers/mmc/host/sdhci_am654.c:9:
In file included from include/linux/iopoll.h:14:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:337:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
In file included from drivers/mmc/host/sdhci_am654.c:17:
>> drivers/mmc/host/cqhci.h:296:32: warning: declaration of 'struct mmc_data' will not be visible outside of this function [-Wvisibility]
296 | void (*prep_tran_desc)(struct mmc_data *data, struct cqhci_host *cq_host,
| ^
7 warnings generated.
vim +296 drivers/mmc/host/cqhci.h
281
282 struct cqhci_host_ops {
283 void (*dumpregs)(struct mmc_host *mmc);
284 void (*write_l)(struct cqhci_host *host, u32 val, int reg);
285 u32 (*read_l)(struct cqhci_host *host, int reg);
286 void (*enable)(struct mmc_host *mmc);
287 void (*disable)(struct mmc_host *mmc, bool recovery);
288 void (*update_dcmd_desc)(struct mmc_host *mmc, struct mmc_request *mrq,
289 u64 *data);
290 void (*pre_enable)(struct mmc_host *mmc);
291 void (*post_disable)(struct mmc_host *mmc);
292 #ifdef CONFIG_MMC_CRYPTO
293 int (*program_key)(struct cqhci_host *cq_host,
294 const union cqhci_crypto_cfg_entry *cfg, int slot);
295 #endif
> 296 void (*prep_tran_desc)(struct mmc_data *data, struct cqhci_host *cq_host,
297 u8 *desc, int sg_count);
298
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki