2020-09-24 07:42:30

by 冯锐

[permalink] [raw]
Subject: [PATCH] mmc: rtsx: Add SD Express mode support for RTS5261

From: Rui Feng <[email protected]>

RTS5261 support legacy SD mode and SD Express mode.
In SD7.x, SD association introduce SD Express as a new mode.
This patch makes RTS5261 support SD Express mode,
and this patch is based on patch "mmc: core: Initial support
for SD express card/host" committed by Ulf Hansson.

Signed-off-by: Rui Feng <[email protected]>
---
drivers/misc/cardreader/rts5261.c | 4 ++
drivers/misc/cardreader/rts5261.h | 23 ------------
drivers/misc/cardreader/rtsx_pcr.c | 5 +++
drivers/mmc/host/rtsx_pci_sdmmc.c | 59 ++++++++++++++++++++++++++++++
include/linux/rtsx_pci.h | 28 ++++++++++++++
5 files changed, 96 insertions(+), 23 deletions(-)

diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
index 471961487ff8..536c90d4fd76 100644
--- a/drivers/misc/cardreader/rts5261.c
+++ b/drivers/misc/cardreader/rts5261.c
@@ -738,8 +738,12 @@ void rts5261_init_params(struct rtsx_pcr *pcr)
{
struct rtsx_cr_option *option = &pcr->option;
struct rtsx_hw_param *hw_param = &pcr->hw_param;
+ u8 val;

pcr->extra_caps = EXTRA_CAPS_SD_SDR50 | EXTRA_CAPS_SD_SDR104;
+ rtsx_pci_read_register(pcr, RTS5261_FW_STATUS, &val);
+ if (!(val & RTS5261_EXPRESS_LINK_FAIL_MASK))
+ pcr->extra_caps |= EXTRA_CAPS_SD_EXPRESS;
pcr->num_slots = 1;
pcr->ops = &rts5261_pcr_ops;

diff --git a/drivers/misc/cardreader/rts5261.h b/drivers/misc/cardreader/rts5261.h
index ebfdd236a553..8d80f0d5d5d6 100644
--- a/drivers/misc/cardreader/rts5261.h
+++ b/drivers/misc/cardreader/rts5261.h
@@ -65,23 +65,6 @@
#define RTS5261_FW_EXPRESS_TEST_MASK (0x01<<0)
#define RTS5261_FW_EA_MODE_MASK (0x01<<5)

-/* FW config register */
-#define RTS5261_FW_CFG0 0xFF54
-#define RTS5261_FW_ENTER_EXPRESS (0x01<<0)
-
-#define RTS5261_FW_CFG1 0xFF55
-#define RTS5261_SYS_CLK_SEL_MCU_CLK (0x01<<7)
-#define RTS5261_CRC_CLK_SEL_MCU_CLK (0x01<<6)
-#define RTS5261_FAKE_MCU_CLOCK_GATING (0x01<<5)
-/*MCU_bus_mode_sel: 0=real 8051 1=fake mcu*/
-#define RTS5261_MCU_BUS_SEL_MASK (0x01<<4)
-/*MCU_clock_sel:VerA 00=aux16M 01=aux400K 1x=REFCLK100M*/
-/*MCU_clock_sel:VerB 00=aux400K 01=aux16M 10=REFCLK100M*/
-#define RTS5261_MCU_CLOCK_SEL_MASK (0x03<<2)
-#define RTS5261_MCU_CLOCK_SEL_16M (0x01<<2)
-#define RTS5261_MCU_CLOCK_GATING (0x01<<1)
-#define RTS5261_DRIVER_ENABLE_FW (0x01<<0)
-
/* FW status register */
#define RTS5261_FW_STATUS 0xFF56
#define RTS5261_EXPRESS_LINK_FAIL_MASK (0x01<<7)
@@ -121,12 +104,6 @@
#define RTS5261_DV3318_19 (0x04<<4)
#define RTS5261_DV3318_33 (0x07<<4)

-#define RTS5261_LDO1_CFG0 0xFF72
-#define RTS5261_LDO1_OCP_THD_MASK (0x07<<5)
-#define RTS5261_LDO1_OCP_EN (0x01<<4)
-#define RTS5261_LDO1_OCP_LMT_THD_MASK (0x03<<2)
-#define RTS5261_LDO1_OCP_LMT_EN (0x01<<1)
-
/* CRD6603-433 190319 request changed */
#define RTS5261_LDO1_OCP_THD_740 (0x00<<5)
#define RTS5261_LDO1_OCP_THD_800 (0x01<<5)
diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
index 37ccc67f4914..6e5c16b4b7d1 100644
--- a/drivers/misc/cardreader/rtsx_pcr.c
+++ b/drivers/misc/cardreader/rtsx_pcr.c
@@ -990,6 +990,11 @@ static irqreturn_t rtsx_pci_isr(int irq, void *dev_id)
} else {
pcr->card_removed |= SD_EXIST;
pcr->card_inserted &= ~SD_EXIST;
+ if (PCI_PID(pcr) == PID_5261) {
+ rtsx_pci_write_register(pcr, RTS5261_FW_STATUS,
+ RTS5261_EXPRESS_LINK_FAIL_MASK, 0);
+ pcr->extra_caps |= EXTRA_CAPS_SD_EXPRESS;
+ }
}
pcr->dma_error_count = 0;
}
diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c
index 2763a376b054..efde374a4a5e 100644
--- a/drivers/mmc/host/rtsx_pci_sdmmc.c
+++ b/drivers/mmc/host/rtsx_pci_sdmmc.c
@@ -895,7 +895,9 @@ static int sd_set_bus_width(struct realtek_pci_sdmmc *host,
static int sd_power_on(struct realtek_pci_sdmmc *host)
{
struct rtsx_pcr *pcr = host->pcr;
+ struct mmc_host *mmc = host->mmc;
int err;
+ u32 val;

if (host->power_state == SDMMC_POWER_ON)
return 0;
@@ -922,6 +924,14 @@ static int sd_power_on(struct realtek_pci_sdmmc *host)
if (err < 0)
return err;

+ if (PCI_PID(pcr) == PID_5261) {
+ val = rtsx_pci_readl(pcr, RTSX_BIPR);
+ if (val & SD_WRITE_PROTECT) {
+ pcr->extra_caps &= ~EXTRA_CAPS_SD_EXPRESS;
+ mmc->caps2 &= ~(MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V);
+ }
+ }
+
host->power_state = SDMMC_POWER_ON;
return 0;
}
@@ -1127,6 +1137,8 @@ static int sdmmc_get_cd(struct mmc_host *mmc)
if (val & SD_EXIST)
cd = 1;

+ if (pcr->extra_caps & EXTRA_CAPS_SD_EXPRESS)
+ mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
mutex_unlock(&pcr->pcr_mutex);

return cd;
@@ -1308,6 +1320,50 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
return err;
}

+static int sdmmc_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
+{
+ u32 relink_time, val;
+ struct realtek_pci_sdmmc *host = mmc_priv(mmc);
+ struct rtsx_pcr *pcr = host->pcr;
+
+ /*
+ * If card has PCIe availability and WP if off,
+ * reader switch to PCIe mode.
+ */
+ val = rtsx_pci_readl(pcr, RTSX_BIPR);
+ if (!(val & SD_WRITE_PROTECT)) {
+ /* Set relink_time for changing to PCIe card */
+ relink_time = 0x8FFF;
+
+ rtsx_pci_write_register(pcr, 0xFF01, 0xFF, relink_time);
+ rtsx_pci_write_register(pcr, 0xFF02, 0xFF, relink_time >> 8);
+ rtsx_pci_write_register(pcr, 0xFF03, 0x01, relink_time >> 16);
+
+ rtsx_pci_write_register(pcr, PETXCFG, 0x80, 0x80);
+ rtsx_pci_write_register(pcr, LDO_VCC_CFG0,
+ RTS5261_LDO1_OCP_THD_MASK,
+ pcr->option.sd_800mA_ocp_thd);
+
+ if (pcr->ops->disable_auto_blink)
+ pcr->ops->disable_auto_blink(pcr);
+
+ /* For PCIe/NVMe mode can't enter delink issue */
+ pcr->hw_param.interrupt_en &= ~(SD_INT_EN);
+ rtsx_pci_writel(pcr, RTSX_BIER, pcr->hw_param.interrupt_en);
+
+ rtsx_pci_write_register(pcr, RTS5260_AUTOLOAD_CFG4,
+ RTS5261_AUX_CLK_16M_EN, RTS5261_AUX_CLK_16M_EN);
+ rtsx_pci_write_register(pcr, RTS5261_FW_CFG0,
+ RTS5261_FW_ENTER_EXPRESS, RTS5261_FW_ENTER_EXPRESS);
+ rtsx_pci_write_register(pcr, RTS5261_FW_CFG1,
+ RTS5261_MCU_BUS_SEL_MASK | RTS5261_MCU_CLOCK_SEL_MASK
+ | RTS5261_MCU_CLOCK_GATING | RTS5261_DRIVER_ENABLE_FW,
+ RTS5261_MCU_CLOCK_SEL_16M | RTS5261_MCU_CLOCK_GATING
+ | RTS5261_DRIVER_ENABLE_FW);
+ }
+ return 0;
+}
+
static const struct mmc_host_ops realtek_pci_sdmmc_ops = {
.pre_req = sdmmc_pre_req,
.post_req = sdmmc_post_req,
@@ -1317,6 +1373,7 @@ static const struct mmc_host_ops realtek_pci_sdmmc_ops = {
.get_cd = sdmmc_get_cd,
.start_signal_voltage_switch = sdmmc_switch_voltage,
.execute_tuning = sdmmc_execute_tuning,
+ .init_sd_express = sdmmc_init_sd_express,
};

static void init_extra_caps(struct realtek_pci_sdmmc *host)
@@ -1338,6 +1395,8 @@ static void init_extra_caps(struct realtek_pci_sdmmc *host)
mmc->caps |= MMC_CAP_8_BIT_DATA;
if (pcr->extra_caps & EXTRA_CAPS_NO_MMC)
mmc->caps2 |= MMC_CAP2_NO_MMC;
+ if (pcr->extra_caps & EXTRA_CAPS_SD_EXPRESS)
+ mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
}

static void realtek_init_host(struct realtek_pci_sdmmc *host)
diff --git a/include/linux/rtsx_pci.h b/include/linux/rtsx_pci.h
index 745f5e73f99a..cea8147e5992 100644
--- a/include/linux/rtsx_pci.h
+++ b/include/linux/rtsx_pci.h
@@ -658,6 +658,24 @@
#define PM_WAKE_EN 0x01
#define PM_CTRL4 0xFF47

+#define RTS5261_FW_CFG0 0xFF54
+#define RTS5261_FW_ENTER_EXPRESS (0x01 << 0)
+
+#define RTS5261_FW_CFG1 0xFF55
+#define RTS5261_SYS_CLK_SEL_MCU_CLK (0x01 << 7)
+#define RTS5261_CRC_CLK_SEL_MCU_CLK (0x01 << 6)
+#define RTS5261_FAKE_MCU_CLOCK_GATING (0x01 << 5)
+#define RTS5261_MCU_BUS_SEL_MASK (0x01 << 4)
+#define RTS5261_MCU_BUS_SEL_MASK (0x01 << 4)
+#define RTS5261_MCU_CLOCK_SEL_MASK (0x03 << 2)
+#define RTS5261_MCU_CLOCK_SEL_16M (0x01 << 2)
+#define RTS5261_MCU_CLOCK_GATING (0x01 << 1)
+#define RTS5261_DRIVER_ENABLE_FW (0x01 << 0)
+#define RTS5261_MCU_CLOCK_SEL_MASK (0x03 << 2)
+#define RTS5261_MCU_CLOCK_SEL_16M (0x01 << 2)
+#define RTS5261_MCU_CLOCK_GATING (0x01 << 1)
+#define RTS5261_DRIVER_ENABLE_FW (0x01 << 0)
+
#define REG_CFG_OOBS_OFF_TIMER 0xFEA6
#define REG_CFG_OOBS_ON_TIMER 0xFEA7
#define REG_CFG_VCM_ON_TIMER 0xFEA8
@@ -701,6 +719,13 @@
#define RTS5260_DVCC_TUNE_MASK 0x70
#define RTS5260_DVCC_33 0x70

+/*RTS5261*/
+#define RTS5261_LDO1_CFG0 0xFF72
+#define RTS5261_LDO1_OCP_THD_MASK (0x07 << 5)
+#define RTS5261_LDO1_OCP_EN (0x01 << 4)
+#define RTS5261_LDO1_OCP_LMT_THD_MASK (0x03 << 2)
+#define RTS5261_LDO1_OCP_LMT_EN (0x01 << 1)
+
#define LDO_VCC_CFG1 0xFF73
#define LDO_VCC_REF_TUNE_MASK 0x30
#define LDO_VCC_REF_1V2 0x20
@@ -741,6 +766,8 @@

#define RTS5260_AUTOLOAD_CFG4 0xFF7F
#define RTS5260_MIMO_DISABLE 0x8A
+/*RTS5261*/
+#define RTS5261_AUX_CLK_16M_EN (1 << 5)

#define RTS5260_REG_GPIO_CTL0 0xFC1A
#define RTS5260_REG_GPIO_MASK 0x01
@@ -1191,6 +1218,7 @@ struct rtsx_pcr {
#define EXTRA_CAPS_MMC_HS200 (1 << 4)
#define EXTRA_CAPS_MMC_8BIT (1 << 5)
#define EXTRA_CAPS_NO_MMC (1 << 7)
+#define EXTRA_CAPS_SD_EXPRESS (1 << 8)
u32 extra_caps;

#define IC_VER_A 0
--
2.17.1


2020-09-24 09:41:27

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] mmc: rtsx: Add SD Express mode support for RTS5261

Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on char-misc/char-misc-testing]
[also build test ERROR on soc/for-next linus/master v5.9-rc6 next-20200923]
[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]

url: https://github.com/0day-ci/linux/commits/rui_feng-realsil-com-cn/mmc-rtsx-Add-SD-Express-mode-support-for-RTS5261/20200924-154122
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git 26ed5146bd17cbcd0fb84e358902ac244728a3f3
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'sd_power_on':
>> drivers/mmc/host/rtsx_pci_sdmmc.c:931:20: error: 'MMC_CAP2_SD_EXP' undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
931 | mmc->caps2 &= ~(MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V);
| ^~~~~~~~~~~~~~~
| MMC_CAP2_NO_SD
drivers/mmc/host/rtsx_pci_sdmmc.c:931:20: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/mmc/host/rtsx_pci_sdmmc.c:931:38: error: 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you mean 'MMC_CAP2_HS400_1_2V'?
931 | mmc->caps2 &= ~(MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V);
| ^~~~~~~~~~~~~~~~~~~~
| MMC_CAP2_HS400_1_2V
drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'sdmmc_get_cd':
drivers/mmc/host/rtsx_pci_sdmmc.c:1141:17: error: 'MMC_CAP2_SD_EXP' undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
1141 | mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
| ^~~~~~~~~~~~~~~
| MMC_CAP2_NO_SD
drivers/mmc/host/rtsx_pci_sdmmc.c:1141:35: error: 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you mean 'MMC_CAP2_HS400_1_2V'?
1141 | mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
| ^~~~~~~~~~~~~~~~~~~~
| MMC_CAP2_HS400_1_2V
drivers/mmc/host/rtsx_pci_sdmmc.c: At top level:
>> drivers/mmc/host/rtsx_pci_sdmmc.c:1376:3: error: 'const struct mmc_host_ops' has no member named 'init_sd_express'
1376 | .init_sd_express = sdmmc_init_sd_express,
| ^~~~~~~~~~~~~~~
drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'init_extra_caps':
drivers/mmc/host/rtsx_pci_sdmmc.c:1399:17: error: 'MMC_CAP2_SD_EXP' undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
1399 | mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
| ^~~~~~~~~~~~~~~
| MMC_CAP2_NO_SD
drivers/mmc/host/rtsx_pci_sdmmc.c:1399:35: error: 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you mean 'MMC_CAP2_HS400_1_2V'?
1399 | mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
| ^~~~~~~~~~~~~~~~~~~~
| MMC_CAP2_HS400_1_2V

# https://github.com/0day-ci/linux/commit/37daa224f78ef228349cee981d690b735fb9bb2b
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review rui_feng-realsil-com-cn/mmc-rtsx-Add-SD-Express-mode-support-for-RTS5261/20200924-154122
git checkout 37daa224f78ef228349cee981d690b735fb9bb2b
vim +931 drivers/mmc/host/rtsx_pci_sdmmc.c

894
895 static int sd_power_on(struct realtek_pci_sdmmc *host)
896 {
897 struct rtsx_pcr *pcr = host->pcr;
898 struct mmc_host *mmc = host->mmc;
899 int err;
900 u32 val;
901
902 if (host->power_state == SDMMC_POWER_ON)
903 return 0;
904
905 rtsx_pci_init_cmd(pcr);
906 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
907 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SHARE_MODE,
908 CARD_SHARE_MASK, CARD_SHARE_48_SD);
909 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_EN,
910 SD_CLK_EN, SD_CLK_EN);
911 err = rtsx_pci_send_cmd(pcr, 100);
912 if (err < 0)
913 return err;
914
915 err = rtsx_pci_card_pull_ctl_enable(pcr, RTSX_SD_CARD);
916 if (err < 0)
917 return err;
918
919 err = rtsx_pci_card_power_on(pcr, RTSX_SD_CARD);
920 if (err < 0)
921 return err;
922
923 err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
924 if (err < 0)
925 return err;
926
927 if (PCI_PID(pcr) == PID_5261) {
928 val = rtsx_pci_readl(pcr, RTSX_BIPR);
929 if (val & SD_WRITE_PROTECT) {
930 pcr->extra_caps &= ~EXTRA_CAPS_SD_EXPRESS;
> 931 mmc->caps2 &= ~(MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V);
932 }
933 }
934
935 host->power_state = SDMMC_POWER_ON;
936 return 0;
937 }
938

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (5.56 kB)
.config.gz (63.80 kB)
Download all attachments

2020-09-24 09:51:54

by 冯锐

[permalink] [raw]
Subject: 答复: [PATCH] mmc: rtsx: Add SD Express mode support for RTS5261

Hi Hansson,

This patch is based on your patch "mmc: core: Initial support for SD express card/host",
If this patch is compiled alone, there must be errors.
What should I do in this situation?

Thanks

>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on char-misc/char-misc-testing] [also build test ERROR
> on soc/for-next linus/master v5.9-rc6 next-20200923] [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]
>
> url:
> https://github.com/0day-ci/linux/commits/rui_feng-realsil-com-cn/mmc-rtsx-A
> dd-SD-Express-mode-support-for-RTS5261/20200924-154122
> base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
> 26ed5146bd17cbcd0fb84e358902ac244728a3f3
> config: arc-allyesconfig (attached as .config)
> compiler: arceb-elf-gcc (GCC) 9.3.0
> reproduce (this is a W=1 build):
> wget
> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
> ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0
> make.cross ARCH=arc
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <[email protected]>
>
> All errors (new ones prefixed by >>):
>
> drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'sd_power_on':
> >> drivers/mmc/host/rtsx_pci_sdmmc.c:931:20: error: 'MMC_CAP2_SD_EXP'
> undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
> 931 | mmc->caps2 &= ~(MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V);
> | ^~~~~~~~~~~~~~~
> | MMC_CAP2_NO_SD
> drivers/mmc/host/rtsx_pci_sdmmc.c:931:20: note: each undeclared
> identifier is reported only once for each function it appears in
> >> drivers/mmc/host/rtsx_pci_sdmmc.c:931:38: error:
> 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you
> mean 'MMC_CAP2_HS400_1_2V'?
> 931 | mmc->caps2 &= ~(MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V);
> |
> ^~~~~~~~~~~~~~~~~~~~
> |
> MMC_CAP2_HS400_1_2V
> drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'sdmmc_get_cd':
> drivers/mmc/host/rtsx_pci_sdmmc.c:1141:17: error: 'MMC_CAP2_SD_EXP'
> undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
> 1141 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V;
> | ^~~~~~~~~~~~~~~
> | MMC_CAP2_NO_SD
> drivers/mmc/host/rtsx_pci_sdmmc.c:1141:35: error:
> 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you
> mean 'MMC_CAP2_HS400_1_2V'?
> 1141 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V;
> |
> ^~~~~~~~~~~~~~~~~~~~
> |
> MMC_CAP2_HS400_1_2V
> drivers/mmc/host/rtsx_pci_sdmmc.c: At top level:
> >> drivers/mmc/host/rtsx_pci_sdmmc.c:1376:3: error: 'const struct
> mmc_host_ops' has no member named 'init_sd_express'
> 1376 | .init_sd_express = sdmmc_init_sd_express,
> | ^~~~~~~~~~~~~~~
> drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'init_extra_caps':
> drivers/mmc/host/rtsx_pci_sdmmc.c:1399:17: error: 'MMC_CAP2_SD_EXP'
> undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
> 1399 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V;
> | ^~~~~~~~~~~~~~~
> | MMC_CAP2_NO_SD
> drivers/mmc/host/rtsx_pci_sdmmc.c:1399:35: error:
> 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you
> mean 'MMC_CAP2_HS400_1_2V'?
> 1399 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V;
> |
> ^~~~~~~~~~~~~~~~~~~~
> |
> MMC_CAP2_HS400_1_2V
>
> #
> https://github.com/0day-ci/linux/commit/37daa224f78ef228349cee981d690b7
> 35fb9bb2b
> git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags
> linux-review
> rui_feng-realsil-com-cn/mmc-rtsx-Add-SD-Express-mode-support-for-RTS5261/
> 20200924-154122
> git checkout 37daa224f78ef228349cee981d690b735fb9bb2b
> vim +931 drivers/mmc/host/rtsx_pci_sdmmc.c
>
> 894
> 895 static int sd_power_on(struct realtek_pci_sdmmc *host)
> 896 {
> 897 struct rtsx_pcr *pcr = host->pcr;
> 898 struct mmc_host *mmc = host->mmc;
> 899 int err;
> 900 u32 val;
> 901
> 902 if (host->power_state == SDMMC_POWER_ON)
> 903 return 0;
> 904
> 905 rtsx_pci_init_cmd(pcr);
> 906 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07,
> SD_MOD_SEL);
> 907 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
> CARD_SHARE_MODE,
> 908 CARD_SHARE_MASK, CARD_SHARE_48_SD);
> 909 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_EN,
> 910 SD_CLK_EN, SD_CLK_EN);
> 911 err = rtsx_pci_send_cmd(pcr, 100);
> 912 if (err < 0)
> 913 return err;
> 914
> 915 err = rtsx_pci_card_pull_ctl_enable(pcr, RTSX_SD_CARD);
> 916 if (err < 0)
> 917 return err;
> 918
> 919 err = rtsx_pci_card_power_on(pcr, RTSX_SD_CARD);
> 920 if (err < 0)
> 921 return err;
> 922
> 923 err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN,
> SD_OUTPUT_EN);
> 924 if (err < 0)
> 925 return err;
> 926
> 927 if (PCI_PID(pcr) == PID_5261) {
> 928 val = rtsx_pci_readl(pcr, RTSX_BIPR);
> 929 if (val & SD_WRITE_PROTECT) {
> 930 pcr->extra_caps &= ~EXTRA_CAPS_SD_EXPRESS;
> > 931 mmc->caps2 &= ~(MMC_CAP2_SD_EXP |
> MMC_CAP2_SD_EXP_1_2V);
> 932 }
> 933 }
> 934
> 935 host->power_state = SDMMC_POWER_ON;
> 936 return 0;
> 937 }
> 938
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/[email protected]
>
> ------Please consider the environment before printing this e-mail.

2020-09-24 10:05:28

by Ulf Hansson

[permalink] [raw]
Subject: Re: [PATCH] mmc: rtsx: Add SD Express mode support for RTS5261

On Thu, 24 Sep 2020 at 11:48, 冯锐 <[email protected]> wrote:
>
> Hi Hansson,
>
> This patch is based on your patch "mmc: core: Initial support for SD express card/host",
> If this patch is compiled alone, there must be errors.
> What should I do in this situation?

You need to pick my patch from the patchtracker or the mailing-list
and fold into your submission as part of a series. In this way the
0-build server will build patches stacked on top of each other.

Moreover, if possible, I would suggest to split cardreader changes
from mmc host changes. In this way you would get a series along the
lines of below (not sure what order is best).

PATCH 1/3: mmc core changes.
PATCH 2/3. cardreader changes.
PATCH 3/3. mmc host changes.

Kind regards
Uffe

>
> Thanks
>
> >
> > Thank you for the patch! Yet something to improve:
> >
> > [auto build test ERROR on char-misc/char-misc-testing] [also build test ERROR
> > on soc/for-next linus/master v5.9-rc6 next-20200923] [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]
> >
> > url:
> > https://github.com/0day-ci/linux/commits/rui_feng-realsil-com-cn/mmc-rtsx-A
> > dd-SD-Express-mode-support-for-RTS5261/20200924-154122
> > base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
> > 26ed5146bd17cbcd0fb84e358902ac244728a3f3
> > config: arc-allyesconfig (attached as .config)
> > compiler: arceb-elf-gcc (GCC) 9.3.0
> > reproduce (this is a W=1 build):
> > wget
> > https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
> > ~/bin/make.cross
> > chmod +x ~/bin/make.cross
> > # save the attached .config to linux build tree
> > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0
> > make.cross ARCH=arc
> >
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <[email protected]>
> >
> > All errors (new ones prefixed by >>):
> >
> > drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'sd_power_on':
> > >> drivers/mmc/host/rtsx_pci_sdmmc.c:931:20: error: 'MMC_CAP2_SD_EXP'
> > undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
> > 931 | mmc->caps2 &= ~(MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V);
> > | ^~~~~~~~~~~~~~~
> > | MMC_CAP2_NO_SD
> > drivers/mmc/host/rtsx_pci_sdmmc.c:931:20: note: each undeclared
> > identifier is reported only once for each function it appears in
> > >> drivers/mmc/host/rtsx_pci_sdmmc.c:931:38: error:
> > 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you
> > mean 'MMC_CAP2_HS400_1_2V'?
> > 931 | mmc->caps2 &= ~(MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V);
> > |
> > ^~~~~~~~~~~~~~~~~~~~
> > |
> > MMC_CAP2_HS400_1_2V
> > drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'sdmmc_get_cd':
> > drivers/mmc/host/rtsx_pci_sdmmc.c:1141:17: error: 'MMC_CAP2_SD_EXP'
> > undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
> > 1141 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V;
> > | ^~~~~~~~~~~~~~~
> > | MMC_CAP2_NO_SD
> > drivers/mmc/host/rtsx_pci_sdmmc.c:1141:35: error:
> > 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you
> > mean 'MMC_CAP2_HS400_1_2V'?
> > 1141 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V;
> > |
> > ^~~~~~~~~~~~~~~~~~~~
> > |
> > MMC_CAP2_HS400_1_2V
> > drivers/mmc/host/rtsx_pci_sdmmc.c: At top level:
> > >> drivers/mmc/host/rtsx_pci_sdmmc.c:1376:3: error: 'const struct
> > mmc_host_ops' has no member named 'init_sd_express'
> > 1376 | .init_sd_express = sdmmc_init_sd_express,
> > | ^~~~~~~~~~~~~~~
> > drivers/mmc/host/rtsx_pci_sdmmc.c: In function 'init_extra_caps':
> > drivers/mmc/host/rtsx_pci_sdmmc.c:1399:17: error: 'MMC_CAP2_SD_EXP'
> > undeclared (first use in this function); did you mean 'MMC_CAP2_NO_SD'?
> > 1399 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V;
> > | ^~~~~~~~~~~~~~~
> > | MMC_CAP2_NO_SD
> > drivers/mmc/host/rtsx_pci_sdmmc.c:1399:35: error:
> > 'MMC_CAP2_SD_EXP_1_2V' undeclared (first use in this function); did you
> > mean 'MMC_CAP2_HS400_1_2V'?
> > 1399 | mmc->caps2 |= MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V;
> > |
> > ^~~~~~~~~~~~~~~~~~~~
> > |
> > MMC_CAP2_HS400_1_2V
> >
> > #
> > https://github.com/0day-ci/linux/commit/37daa224f78ef228349cee981d690b7
> > 35fb9bb2b
> > git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags
> > linux-review
> > rui_feng-realsil-com-cn/mmc-rtsx-Add-SD-Express-mode-support-for-RTS5261/
> > 20200924-154122
> > git checkout 37daa224f78ef228349cee981d690b735fb9bb2b
> > vim +931 drivers/mmc/host/rtsx_pci_sdmmc.c
> >
> > 894
> > 895 static int sd_power_on(struct realtek_pci_sdmmc *host)
> > 896 {
> > 897 struct rtsx_pcr *pcr = host->pcr;
> > 898 struct mmc_host *mmc = host->mmc;
> > 899 int err;
> > 900 u32 val;
> > 901
> > 902 if (host->power_state == SDMMC_POWER_ON)
> > 903 return 0;
> > 904
> > 905 rtsx_pci_init_cmd(pcr);
> > 906 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07,
> > SD_MOD_SEL);
> > 907 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
> > CARD_SHARE_MODE,
> > 908 CARD_SHARE_MASK, CARD_SHARE_48_SD);
> > 909 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_EN,
> > 910 SD_CLK_EN, SD_CLK_EN);
> > 911 err = rtsx_pci_send_cmd(pcr, 100);
> > 912 if (err < 0)
> > 913 return err;
> > 914
> > 915 err = rtsx_pci_card_pull_ctl_enable(pcr, RTSX_SD_CARD);
> > 916 if (err < 0)
> > 917 return err;
> > 918
> > 919 err = rtsx_pci_card_power_on(pcr, RTSX_SD_CARD);
> > 920 if (err < 0)
> > 921 return err;
> > 922
> > 923 err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN,
> > SD_OUTPUT_EN);
> > 924 if (err < 0)
> > 925 return err;
> > 926
> > 927 if (PCI_PID(pcr) == PID_5261) {
> > 928 val = rtsx_pci_readl(pcr, RTSX_BIPR);
> > 929 if (val & SD_WRITE_PROTECT) {
> > 930 pcr->extra_caps &= ~EXTRA_CAPS_SD_EXPRESS;
> > > 931 mmc->caps2 &= ~(MMC_CAP2_SD_EXP |
> > MMC_CAP2_SD_EXP_1_2V);
> > 932 }
> > 933 }
> > 934
> > 935 host->power_state = SDMMC_POWER_ON;
> > 936 return 0;
> > 937 }
> > 938
> >
> > ---
> > 0-DAY CI Kernel Test Service, Intel Corporation
> > https://lists.01.org/hyperkitty/list/[email protected]
> >
> > ------Please consider the environment before printing this e-mail.

2020-09-24 11:18:04

by Ulf Hansson

[permalink] [raw]
Subject: Re: [PATCH] mmc: rtsx: Add SD Express mode support for RTS5261

On Thu, 24 Sep 2020 at 12:01, Ulf Hansson <[email protected]> wrote:
>
> On Thu, 24 Sep 2020 at 11:48, 冯锐 <[email protected]> wrote:
> >
> > Hi Hansson,
> >
> > This patch is based on your patch "mmc: core: Initial support for SD express card/host",
> > If this patch is compiled alone, there must be errors.
> > What should I do in this situation?
>
> You need to pick my patch from the patchtracker or the mailing-list
> and fold into your submission as part of a series. In this way the
> 0-build server will build patches stacked on top of each other.
>
> Moreover, if possible, I would suggest to split cardreader changes
> from mmc host changes. In this way you would get a series along the
> lines of below (not sure what order is best).
>
> PATCH 1/3: mmc core changes.
> PATCH 2/3. cardreader changes.
> PATCH 3/3. mmc host changes.
>
> Kind regards
> Uffe

One more thing, please send the series to linux-mmc as well.

[...]

Kind regards
Uffe