Re: [PATCH] mmc: mediatek: add MT8183 SDIO driver support

From: kbuild test robot
Date: Thu Nov 22 2018 - 15:36:20 EST


Hi jjian,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ulf.hansson-mmc/next]
[also build test ERROR on v4.20-rc3 next-20181122]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Jjian-Zhou/mmc-mediatek-add-MT8183-SDIO-driver-support/20181123-025850
base: git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git next
config: x86_64-randconfig-u0-11230408 (attached as .config)
compiler: gcc-5 (Debian 5.5.0-3) 5.4.1 20171010
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All error/warnings (new ones prefixed by >>):

drivers/mmc/host/mtk-sd.c: In function 'msdc_drv_probe':
>> drivers/mmc/host/mtk-sd.c:2263:12: error: invalid storage class for function 'msdc_drv_remove'
static int msdc_drv_remove(struct platform_device *pdev)
^
>> drivers/mmc/host/mtk-sd.c:2263:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
static int msdc_drv_remove(struct platform_device *pdev)
^
>> drivers/mmc/host/mtk-sd.c:2292:13: error: invalid storage class for function 'msdc_save_reg'
static void msdc_save_reg(struct msdc_host *host)
^
>> drivers/mmc/host/mtk-sd.c:2319:13: error: invalid storage class for function 'msdc_restore_reg'
static void msdc_restore_reg(struct msdc_host *host)
^
>> drivers/mmc/host/mtk-sd.c:2346:12: error: invalid storage class for function 'msdc_runtime_suspend'
static int msdc_runtime_suspend(struct device *dev)
^
>> drivers/mmc/host/mtk-sd.c:2356:12: error: invalid storage class for function 'msdc_runtime_resume'
static int msdc_runtime_resume(struct device *dev)
^
In file included from include/linux/device.h:23:0,
from include/linux/dma-mapping.h:7,
from drivers/mmc/host/mtk-sd.c:18:
>> drivers/mmc/host/mtk-sd.c:2370:21: error: initializer element is not constant
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:354:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_suspend = suspend_fn, \
^
drivers/mmc/host/mtk-sd.c:2370:21: note: (near initialization for 'msdc_dev_pm_ops.runtime_suspend')
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:354:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_suspend = suspend_fn, \
^
drivers/mmc/host/mtk-sd.c:2370:43: error: initializer element is not constant
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:355:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_resume = resume_fn, \
^
drivers/mmc/host/mtk-sd.c:2370:43: note: (near initialization for 'msdc_dev_pm_ops.runtime_resume')
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:355:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_resume = resume_fn, \
^
drivers/mmc/host/mtk-sd.c:2375:12: error: initializer element is not constant
.remove = msdc_drv_remove,
^
drivers/mmc/host/mtk-sd.c:2375:12: note: (near initialization for 'mt_msdc_driver.remove')
In file included from include/linux/dma-mapping.h:7:0,
from drivers/mmc/host/mtk-sd.c:18:
>> drivers/mmc/host/mtk-sd.c:2383:24: error: invalid storage class for function 'mt_msdc_driver_init'
module_platform_driver(mt_msdc_driver);
^
include/linux/device.h:1611:19: note: in definition of macro 'module_driver'
static int __init __driver##_init(void) \
^
>> drivers/mmc/host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/kernel.h:10:0,
from include/linux/list.h:9,
from include/linux/module.h:9,
from drivers/mmc/host/mtk-sd.c:15:
>> include/linux/compiler.h:285:44: error: initializer element is not constant
__PASTE(__addressable_##sym, __LINE__) = (void *)&sym;
^
include/linux/init.h:187:2: note: in expansion of macro '__ADDRESSABLE'
__ADDRESSABLE(fn) \
^
include/linux/init.h:198:35: note: in expansion of macro '___define_initcall'
#define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)
^
include/linux/init.h:227:30: note: in expansion of macro '__define_initcall'
#define device_initcall(fn) __define_initcall(fn, 6)
^
include/linux/init.h:232:24: note: in expansion of macro 'device_initcall'
#define __initcall(fn) device_initcall(fn)
^
include/linux/module.h:87:24: note: in expansion of macro '__initcall'
#define module_init(x) __initcall(x);
^
include/linux/device.h:1615:1: note: in expansion of macro 'module_init'
module_init(__driver##_init); \
^
include/linux/platform_device.h:229:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^
>> drivers/mmc/host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/dma-mapping.h:7:0,
from drivers/mmc/host/mtk-sd.c:18:
>> drivers/mmc/host/mtk-sd.c:2383:24: error: invalid storage class for function 'mt_msdc_driver_exit'
module_platform_driver(mt_msdc_driver);
^
include/linux/device.h:1616:20: note: in definition of macro 'module_driver'
static void __exit __driver##_exit(void) \
^
>> drivers/mmc/host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
>> include/linux/device.h:1616:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
static void __exit __driver##_exit(void) \
^
include/linux/platform_device.h:229:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^
>> drivers/mmc/host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/printk.h:6:0,
from include/linux/kernel.h:14,
from include/linux/list.h:9,
from include/linux/module.h:9,
from drivers/mmc/host/mtk-sd.c:15:
drivers/mmc/host/mtk-sd.c:2383:24: error: initializer element is not constant
module_platform_driver(mt_msdc_driver);
^
include/linux/init.h:235:50: note: in definition of macro '__exitcall'
static exitcall_t __exitcall_##fn __exit_call = fn
^
include/linux/device.h:1620:1: note: in expansion of macro 'module_exit'
module_exit(__driver##_exit);
^
include/linux/platform_device.h:229:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^
>> drivers/mmc/host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/module.h:18:0,
from drivers/mmc/host/mtk-sd.c:15:
>> include/linux/moduleparam.h:28:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
struct __UNIQUE_ID(name) {}
^
include/linux/module.h:161:32: note: in expansion of macro '__MODULE_INFO'
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
^
include/linux/module.h:199:34: note: in expansion of macro 'MODULE_INFO'
#define MODULE_LICENSE(_license) MODULE_INFO(license, _license)
^
>> drivers/mmc/host/mtk-sd.c:2384:1: note: in expansion of macro 'MODULE_LICENSE'
MODULE_LICENSE("GPL v2");
^
In file included from <command-line>:0:0:
>> include/linux/compiler-gcc.h:75:45: error: expected declaration or statement at end of input
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
^
include/linux/compiler_types.h:53:23: note: in definition of macro '___PASTE'
#define ___PASTE(a,b) a##b
^
include/linux/compiler-gcc.h:75:29: note: in expansion of macro '__PASTE'
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
^
include/linux/compiler_types.h:54:22: note: in expansion of macro '___PASTE'
#define __PASTE(a,b) ___PASTE(a,b)
^
include/linux/compiler-gcc.h:75:37: note: in expansion of macro '__PASTE'
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
^
include/linux/moduleparam.h:28:10: note: in expansion of macro '__UNIQUE_ID'
struct __UNIQUE_ID(name) {}
^
include/linux/module.h:161:32: note: in expansion of macro '__MODULE_INFO'
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
^
include/linux/module.h:208:42: note: in expansion of macro 'MODULE_INFO'
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
^
>> drivers/mmc/host/mtk-sd.c:2385:1: note: in expansion of macro 'MODULE_DESCRIPTION'
MODULE_DESCRIPTION("MediaTek SD/MMC Card Driver");
^
drivers/mmc/host/mtk-sd.c: At top level:
drivers/mmc/host/mtk-sd.c:2094:12: warning: 'msdc_drv_probe' defined but not used [-Wunused-function]
static int msdc_drv_probe(struct platform_device *pdev)
^
--
drivers/mmc//host/mtk-sd.c: In function 'msdc_drv_probe':
drivers/mmc//host/mtk-sd.c:2263:12: error: invalid storage class for function 'msdc_drv_remove'
static int msdc_drv_remove(struct platform_device *pdev)
^
drivers/mmc//host/mtk-sd.c:2263:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
static int msdc_drv_remove(struct platform_device *pdev)
^
drivers/mmc//host/mtk-sd.c:2292:13: error: invalid storage class for function 'msdc_save_reg'
static void msdc_save_reg(struct msdc_host *host)
^
drivers/mmc//host/mtk-sd.c:2319:13: error: invalid storage class for function 'msdc_restore_reg'
static void msdc_restore_reg(struct msdc_host *host)
^
drivers/mmc//host/mtk-sd.c:2346:12: error: invalid storage class for function 'msdc_runtime_suspend'
static int msdc_runtime_suspend(struct device *dev)
^
drivers/mmc//host/mtk-sd.c:2356:12: error: invalid storage class for function 'msdc_runtime_resume'
static int msdc_runtime_resume(struct device *dev)
^
In file included from include/linux/device.h:23:0,
from include/linux/dma-mapping.h:7,
from drivers/mmc//host/mtk-sd.c:18:
drivers/mmc//host/mtk-sd.c:2370:21: error: initializer element is not constant
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:354:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_suspend = suspend_fn, \
^
drivers/mmc//host/mtk-sd.c:2370:21: note: (near initialization for 'msdc_dev_pm_ops.runtime_suspend')
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:354:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_suspend = suspend_fn, \
^
drivers/mmc//host/mtk-sd.c:2370:43: error: initializer element is not constant
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:355:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_resume = resume_fn, \
^
drivers/mmc//host/mtk-sd.c:2370:43: note: (near initialization for 'msdc_dev_pm_ops.runtime_resume')
SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
^
include/linux/pm.h:355:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
.runtime_resume = resume_fn, \
^
drivers/mmc//host/mtk-sd.c:2375:12: error: initializer element is not constant
.remove = msdc_drv_remove,
^
drivers/mmc//host/mtk-sd.c:2375:12: note: (near initialization for 'mt_msdc_driver.remove')
In file included from include/linux/dma-mapping.h:7:0,
from drivers/mmc//host/mtk-sd.c:18:
drivers/mmc//host/mtk-sd.c:2383:24: error: invalid storage class for function 'mt_msdc_driver_init'
module_platform_driver(mt_msdc_driver);
^
include/linux/device.h:1611:19: note: in definition of macro 'module_driver'
static int __init __driver##_init(void) \
^
drivers/mmc//host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/kernel.h:10:0,
from include/linux/list.h:9,
from include/linux/module.h:9,
from drivers/mmc//host/mtk-sd.c:15:
>> include/linux/compiler.h:285:44: error: initializer element is not constant
__PASTE(__addressable_##sym, __LINE__) = (void *)&sym;
^
include/linux/init.h:187:2: note: in expansion of macro '__ADDRESSABLE'
__ADDRESSABLE(fn) \
^
include/linux/init.h:198:35: note: in expansion of macro '___define_initcall'
#define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)
^
include/linux/init.h:227:30: note: in expansion of macro '__define_initcall'
#define device_initcall(fn) __define_initcall(fn, 6)
^
include/linux/init.h:232:24: note: in expansion of macro 'device_initcall'
#define __initcall(fn) device_initcall(fn)
^
include/linux/module.h:87:24: note: in expansion of macro '__initcall'
#define module_init(x) __initcall(x);
^
include/linux/device.h:1615:1: note: in expansion of macro 'module_init'
module_init(__driver##_init); \
^
include/linux/platform_device.h:229:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^
drivers/mmc//host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/dma-mapping.h:7:0,
from drivers/mmc//host/mtk-sd.c:18:
drivers/mmc//host/mtk-sd.c:2383:24: error: invalid storage class for function 'mt_msdc_driver_exit'
module_platform_driver(mt_msdc_driver);
^
include/linux/device.h:1616:20: note: in definition of macro 'module_driver'
static void __exit __driver##_exit(void) \
^
drivers/mmc//host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
>> include/linux/device.h:1616:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
static void __exit __driver##_exit(void) \
^
include/linux/platform_device.h:229:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^
drivers/mmc//host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/printk.h:6:0,
from include/linux/kernel.h:14,
from include/linux/list.h:9,
from include/linux/module.h:9,
from drivers/mmc//host/mtk-sd.c:15:
drivers/mmc//host/mtk-sd.c:2383:24: error: initializer element is not constant
module_platform_driver(mt_msdc_driver);
^
include/linux/init.h:235:50: note: in definition of macro '__exitcall'
static exitcall_t __exitcall_##fn __exit_call = fn
^
include/linux/device.h:1620:1: note: in expansion of macro 'module_exit'
module_exit(__driver##_exit);
^
include/linux/platform_device.h:229:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^
drivers/mmc//host/mtk-sd.c:2383:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(mt_msdc_driver);
^
In file included from include/linux/module.h:18:0,
from drivers/mmc//host/mtk-sd.c:15:
>> include/linux/moduleparam.h:28:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
struct __UNIQUE_ID(name) {}
^
include/linux/module.h:161:32: note: in expansion of macro '__MODULE_INFO'
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
^
include/linux/module.h:199:34: note: in expansion of macro 'MODULE_INFO'
#define MODULE_LICENSE(_license) MODULE_INFO(license, _license)
^
drivers/mmc//host/mtk-sd.c:2384:1: note: in expansion of macro 'MODULE_LICENSE'
MODULE_LICENSE("GPL v2");
^
In file included from <command-line>:0:0:
>> include/linux/compiler-gcc.h:75:45: error: expected declaration or statement at end of input
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
^
include/linux/compiler_types.h:53:23: note: in definition of macro '___PASTE'
#define ___PASTE(a,b) a##b
^
include/linux/compiler-gcc.h:75:29: note: in expansion of macro '__PASTE'
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
^
include/linux/compiler_types.h:54:22: note: in expansion of macro '___PASTE'
#define __PASTE(a,b) ___PASTE(a,b)
^
include/linux/compiler-gcc.h:75:37: note: in expansion of macro '__PASTE'
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
^
include/linux/moduleparam.h:28:10: note: in expansion of macro '__UNIQUE_ID'
struct __UNIQUE_ID(name) {}
^
include/linux/module.h:161:32: note: in expansion of macro '__MODULE_INFO'
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
^
include/linux/module.h:208:42: note: in expansion of macro 'MODULE_INFO'
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
^
drivers/mmc//host/mtk-sd.c:2385:1: note: in expansion of macro 'MODULE_DESCRIPTION'
MODULE_DESCRIPTION("MediaTek SD/MMC Card Driver");
^
drivers/mmc//host/mtk-sd.c: At top level:
drivers/mmc//host/mtk-sd.c:2094:12: warning: 'msdc_drv_probe' defined but not used [-Wunused-function]
static int msdc_drv_probe(struct platform_device *pdev)
^

vim +/msdc_drv_remove +2263 drivers/mmc/host/mtk-sd.c

20848903 Chaotian Jing 2015-06-15 2262
20848903 Chaotian Jing 2015-06-15 @2263 static int msdc_drv_remove(struct platform_device *pdev)
20848903 Chaotian Jing 2015-06-15 2264 {
20848903 Chaotian Jing 2015-06-15 2265 struct mmc_host *mmc;
20848903 Chaotian Jing 2015-06-15 2266 struct msdc_host *host;
20848903 Chaotian Jing 2015-06-15 2267
20848903 Chaotian Jing 2015-06-15 2268 mmc = platform_get_drvdata(pdev);
20848903 Chaotian Jing 2015-06-15 2269 host = mmc_priv(mmc);
20848903 Chaotian Jing 2015-06-15 2270
4b8a43e9 Chaotian Jing 2015-06-15 2271 pm_runtime_get_sync(host->dev);
4b8a43e9 Chaotian Jing 2015-06-15 2272
20848903 Chaotian Jing 2015-06-15 2273 platform_set_drvdata(pdev, NULL);
20848903 Chaotian Jing 2015-06-15 2274 mmc_remove_host(host->mmc);
20848903 Chaotian Jing 2015-06-15 2275 msdc_deinit_hw(host);
20848903 Chaotian Jing 2015-06-15 2276 msdc_gate_clock(host);
20848903 Chaotian Jing 2015-06-15 2277
4b8a43e9 Chaotian Jing 2015-06-15 2278 pm_runtime_disable(host->dev);
4b8a43e9 Chaotian Jing 2015-06-15 2279 pm_runtime_put_noidle(host->dev);
20848903 Chaotian Jing 2015-06-15 2280 dma_free_coherent(&pdev->dev,
16f2e0c6 Phong LE 2017-05-24 2281 2 * sizeof(struct mt_gpdma_desc),
20848903 Chaotian Jing 2015-06-15 2282 host->dma.gpd, host->dma.gpd_addr);
20848903 Chaotian Jing 2015-06-15 2283 dma_free_coherent(&pdev->dev, MAX_BD_NUM * sizeof(struct mt_bdma_desc),
20848903 Chaotian Jing 2015-06-15 2284 host->dma.bd, host->dma.bd_addr);
20848903 Chaotian Jing 2015-06-15 2285
20848903 Chaotian Jing 2015-06-15 2286 mmc_free_host(host->mmc);
20848903 Chaotian Jing 2015-06-15 2287
20848903 Chaotian Jing 2015-06-15 2288 return 0;
20848903 Chaotian Jing 2015-06-15 2289 }
20848903 Chaotian Jing 2015-06-15 2290
4b8a43e9 Chaotian Jing 2015-06-15 2291 #ifdef CONFIG_PM
4b8a43e9 Chaotian Jing 2015-06-15 @2292 static void msdc_save_reg(struct msdc_host *host)
4b8a43e9 Chaotian Jing 2015-06-15 2293 {
39add252 Chaotian Jing 2017-10-16 2294 u32 tune_reg = host->dev_comp->pad_tune_reg;
39add252 Chaotian Jing 2017-10-16 2295
4b8a43e9 Chaotian Jing 2015-06-15 2296 host->save_para.msdc_cfg = readl(host->base + MSDC_CFG);
4b8a43e9 Chaotian Jing 2015-06-15 2297 host->save_para.iocon = readl(host->base + MSDC_IOCON);
4b8a43e9 Chaotian Jing 2015-06-15 2298 host->save_para.sdc_cfg = readl(host->base + SDC_CFG);
4b8a43e9 Chaotian Jing 2015-06-15 2299 host->save_para.patch_bit0 = readl(host->base + MSDC_PATCH_BIT);
4b8a43e9 Chaotian Jing 2015-06-15 2300 host->save_para.patch_bit1 = readl(host->base + MSDC_PATCH_BIT1);
2fea5819 Chaotian Jing 2017-10-16 2301 host->save_para.patch_bit2 = readl(host->base + MSDC_PATCH_BIT2);
6397b7f5 Chaotian Jing 2015-10-27 2302 host->save_para.pad_ds_tune = readl(host->base + PAD_DS_TUNE);
1ede5cb8 yong mao 2017-03-15 2303 host->save_para.pad_cmd_tune = readl(host->base + PAD_CMD_TUNE);
6397b7f5 Chaotian Jing 2015-10-27 2304 host->save_para.emmc50_cfg0 = readl(host->base + EMMC50_CFG0);
c8609b22 Chaotian Jing 2017-10-16 2305 host->save_para.emmc50_cfg3 = readl(host->base + EMMC50_CFG3);
d9dcbfc8 Chaotian Jing 2017-10-16 2306 host->save_para.sdc_fifo_cfg = readl(host->base + SDC_FIFO_CFG);
a2e6d1f6 Chaotian Jing 2018-10-13 2307 if (host->top_base) {
a2e6d1f6 Chaotian Jing 2018-10-13 2308 host->save_para.emmc_top_control =
a2e6d1f6 Chaotian Jing 2018-10-13 2309 readl(host->top_base + EMMC_TOP_CONTROL);
a2e6d1f6 Chaotian Jing 2018-10-13 2310 host->save_para.emmc_top_cmd =
a2e6d1f6 Chaotian Jing 2018-10-13 2311 readl(host->top_base + EMMC_TOP_CMD);
a2e6d1f6 Chaotian Jing 2018-10-13 2312 host->save_para.emmc50_pad_ds_tune =
a2e6d1f6 Chaotian Jing 2018-10-13 2313 readl(host->top_base + EMMC50_PAD_DS_TUNE);
a2e6d1f6 Chaotian Jing 2018-10-13 2314 } else {
a2e6d1f6 Chaotian Jing 2018-10-13 2315 host->save_para.pad_tune = readl(host->base + tune_reg);
a2e6d1f6 Chaotian Jing 2018-10-13 2316 }
4b8a43e9 Chaotian Jing 2015-06-15 2317 }
4b8a43e9 Chaotian Jing 2015-06-15 2318
4b8a43e9 Chaotian Jing 2015-06-15 @2319 static void msdc_restore_reg(struct msdc_host *host)
4b8a43e9 Chaotian Jing 2015-06-15 2320 {
39add252 Chaotian Jing 2017-10-16 2321 u32 tune_reg = host->dev_comp->pad_tune_reg;
39add252 Chaotian Jing 2017-10-16 2322
4b8a43e9 Chaotian Jing 2015-06-15 2323 writel(host->save_para.msdc_cfg, host->base + MSDC_CFG);
4b8a43e9 Chaotian Jing 2015-06-15 2324 writel(host->save_para.iocon, host->base + MSDC_IOCON);
4b8a43e9 Chaotian Jing 2015-06-15 2325 writel(host->save_para.sdc_cfg, host->base + SDC_CFG);
4b8a43e9 Chaotian Jing 2015-06-15 2326 writel(host->save_para.patch_bit0, host->base + MSDC_PATCH_BIT);
4b8a43e9 Chaotian Jing 2015-06-15 2327 writel(host->save_para.patch_bit1, host->base + MSDC_PATCH_BIT1);
2fea5819 Chaotian Jing 2017-10-16 2328 writel(host->save_para.patch_bit2, host->base + MSDC_PATCH_BIT2);
6397b7f5 Chaotian Jing 2015-10-27 2329 writel(host->save_para.pad_ds_tune, host->base + PAD_DS_TUNE);
1ede5cb8 yong mao 2017-03-15 2330 writel(host->save_para.pad_cmd_tune, host->base + PAD_CMD_TUNE);
6397b7f5 Chaotian Jing 2015-10-27 2331 writel(host->save_para.emmc50_cfg0, host->base + EMMC50_CFG0);
c8609b22 Chaotian Jing 2017-10-16 2332 writel(host->save_para.emmc50_cfg3, host->base + EMMC50_CFG3);
d9dcbfc8 Chaotian Jing 2017-10-16 2333 writel(host->save_para.sdc_fifo_cfg, host->base + SDC_FIFO_CFG);
a2e6d1f6 Chaotian Jing 2018-10-13 2334 if (host->top_base) {
a2e6d1f6 Chaotian Jing 2018-10-13 2335 writel(host->save_para.emmc_top_control,
a2e6d1f6 Chaotian Jing 2018-10-13 2336 host->top_base + EMMC_TOP_CONTROL);
a2e6d1f6 Chaotian Jing 2018-10-13 2337 writel(host->save_para.emmc_top_cmd,
a2e6d1f6 Chaotian Jing 2018-10-13 2338 host->top_base + EMMC_TOP_CMD);
a2e6d1f6 Chaotian Jing 2018-10-13 2339 writel(host->save_para.emmc50_pad_ds_tune,
a2e6d1f6 Chaotian Jing 2018-10-13 2340 host->top_base + EMMC50_PAD_DS_TUNE);
a2e6d1f6 Chaotian Jing 2018-10-13 2341 } else {
a2e6d1f6 Chaotian Jing 2018-10-13 2342 writel(host->save_para.pad_tune, host->base + tune_reg);
a2e6d1f6 Chaotian Jing 2018-10-13 2343 }
4b8a43e9 Chaotian Jing 2015-06-15 2344 }
4b8a43e9 Chaotian Jing 2015-06-15 2345
4b8a43e9 Chaotian Jing 2015-06-15 @2346 static int msdc_runtime_suspend(struct device *dev)
4b8a43e9 Chaotian Jing 2015-06-15 2347 {
4b8a43e9 Chaotian Jing 2015-06-15 2348 struct mmc_host *mmc = dev_get_drvdata(dev);
4b8a43e9 Chaotian Jing 2015-06-15 2349 struct msdc_host *host = mmc_priv(mmc);
4b8a43e9 Chaotian Jing 2015-06-15 2350
4b8a43e9 Chaotian Jing 2015-06-15 2351 msdc_save_reg(host);
4b8a43e9 Chaotian Jing 2015-06-15 2352 msdc_gate_clock(host);
4b8a43e9 Chaotian Jing 2015-06-15 2353 return 0;
4b8a43e9 Chaotian Jing 2015-06-15 2354 }
4b8a43e9 Chaotian Jing 2015-06-15 2355
4b8a43e9 Chaotian Jing 2015-06-15 @2356 static int msdc_runtime_resume(struct device *dev)
4b8a43e9 Chaotian Jing 2015-06-15 2357 {
4b8a43e9 Chaotian Jing 2015-06-15 2358 struct mmc_host *mmc = dev_get_drvdata(dev);
4b8a43e9 Chaotian Jing 2015-06-15 2359 struct msdc_host *host = mmc_priv(mmc);
4b8a43e9 Chaotian Jing 2015-06-15 2360
4b8a43e9 Chaotian Jing 2015-06-15 2361 msdc_ungate_clock(host);
4b8a43e9 Chaotian Jing 2015-06-15 2362 msdc_restore_reg(host);
4b8a43e9 Chaotian Jing 2015-06-15 2363 return 0;
4b8a43e9 Chaotian Jing 2015-06-15 2364 }
4b8a43e9 Chaotian Jing 2015-06-15 2365 #endif
4b8a43e9 Chaotian Jing 2015-06-15 2366
4b8a43e9 Chaotian Jing 2015-06-15 2367 static const struct dev_pm_ops msdc_dev_pm_ops = {
4b8a43e9 Chaotian Jing 2015-06-15 2368 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
4b8a43e9 Chaotian Jing 2015-06-15 2369 pm_runtime_force_resume)
4b8a43e9 Chaotian Jing 2015-06-15 @2370 SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL)
4b8a43e9 Chaotian Jing 2015-06-15 2371 };
4b8a43e9 Chaotian Jing 2015-06-15 2372
20848903 Chaotian Jing 2015-06-15 2373 static struct platform_driver mt_msdc_driver = {
20848903 Chaotian Jing 2015-06-15 2374 .probe = msdc_drv_probe,
20848903 Chaotian Jing 2015-06-15 @2375 .remove = msdc_drv_remove,
20848903 Chaotian Jing 2015-06-15 2376 .driver = {
20848903 Chaotian Jing 2015-06-15 2377 .name = "mtk-msdc",
20848903 Chaotian Jing 2015-06-15 2378 .of_match_table = msdc_of_ids,
4b8a43e9 Chaotian Jing 2015-06-15 2379 .pm = &msdc_dev_pm_ops,
20848903 Chaotian Jing 2015-06-15 2380 },
20848903 Chaotian Jing 2015-06-15 2381 };
20848903 Chaotian Jing 2015-06-15 2382
20848903 Chaotian Jing 2015-06-15 @2383 module_platform_driver(mt_msdc_driver);
20848903 Chaotian Jing 2015-06-15 @2384 MODULE_LICENSE("GPL v2");
20848903 Chaotian Jing 2015-06-15 @2385 MODULE_DESCRIPTION("MediaTek SD/MMC Card Driver");

:::::: The code at line 2263 was first introduced by commit
:::::: 208489032bdd8d4a7de50f3057c175058f271956 mmc: mediatek: Add Mediatek MMC driver

:::::: TO: Chaotian Jing <chaotian.jing@xxxxxxxxxxxx>
:::::: CC: Ulf Hansson <ulf.hansson@xxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip