Linux-mmc Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 0/5] minor rtsx cleanups
@ 2020-07-21 21:23 Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 1/5] misc: rtsx: Use pcie_capability_clear_and_set_word() for PCI_EXP_LNKCTL Bjorn Helgaas
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Bjorn Helgaas @ 2020-07-21 21:23 UTC (permalink / raw)
  To: Ricky Wu
  Cc: Arnd Bergmann, Greg Kroah-Hartman, Ulf Hansson, Rui Feng,
	Klaus Doth, Linus Walleij, Rui Miguel Silva, Puranjay Mohan,
	linux-kernel, linux-mmc, Bjorn Helgaas

From: Bjorn Helgaas <bhelgaas@google.com>

Clean up some needlessly device-specific stuff in the Realtek card reader
drivers.

This implements some of my suggestions from
https://lore.kernel.org/r/20200720220651.GA1035857@bjorn-Precision-5520

This will conflict with Ricky's post here:
https://lore.kernel.org/r/20200706070259.32565-1-ricky_wu@realtek.com

I'll be happy to update this on top of Ricky's patch after it's applied, or
Ricky could pick up these patches and base his on top.

Bjorn Helgaas (5):
  misc: rtsx: Use pcie_capability_clear_and_set_word() for
    PCI_EXP_LNKCTL
  misc: rtsx: Remove unused pcie_cap
  misc: rtsx: Remove rtsx_pci_read/write_config() wrappers
  misc: rtsx: Find L1 PM Substates capability instead of hard-coding
  misc: rtsx: Use standard PCI definitions

 drivers/misc/cardreader/rtl8411.c  |  8 +++++---
 drivers/misc/cardreader/rts5209.c  |  5 +++--
 drivers/misc/cardreader/rts5227.c  |  5 +++--
 drivers/misc/cardreader/rts5229.c  |  5 +++--
 drivers/misc/cardreader/rts5249.c  | 28 ++++++++++++++------------
 drivers/misc/cardreader/rts5260.c  | 23 +++++++++++++--------
 drivers/misc/cardreader/rts5261.c  | 32 +++++++++++++++++++-----------
 drivers/misc/cardreader/rtsx_pcr.c |  7 ++++---
 include/linux/rtsx_pci.h           | 22 --------------------
 9 files changed, 68 insertions(+), 67 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/5] misc: rtsx: Use pcie_capability_clear_and_set_word() for PCI_EXP_LNKCTL
  2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
@ 2020-07-21 21:23 ` Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 2/5] misc: rtsx: Remove unused pcie_cap Bjorn Helgaas
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Bjorn Helgaas @ 2020-07-21 21:23 UTC (permalink / raw)
  To: Ricky Wu
  Cc: Arnd Bergmann, Greg Kroah-Hartman, Ulf Hansson, Rui Feng,
	Klaus Doth, Linus Walleij, Rui Miguel Silva, Puranjay Mohan,
	linux-kernel, linux-mmc, Bjorn Helgaas

From: Bjorn Helgaas <bhelgaas@google.com>

Instead of using the driver-specific rtsx_pci_write_config_byte() to update
the PCIe Link Control Register, use pcie_capability_write_word() like the
rest of the kernel does.  This makes it easier to maintain ASPM across the
PCI core and drivers.

No functional change intended.  I missed this when doing 3d1e7aa80d1c
("misc: rtsx: Use pcie_capability_clear_and_set_word() for
PCI_EXP_LNKCTL").

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/misc/cardreader/rtsx_pcr.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
index 0d5928bc1b6d..6a4d6c8f4e71 100644
--- a/drivers/misc/cardreader/rtsx_pcr.c
+++ b/drivers/misc/cardreader/rtsx_pcr.c
@@ -1231,6 +1231,7 @@ int rtsx_ms_power_off_card3v3(struct rtsx_pcr *pcr)
 
 static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	int err;
 
 	pcr->pcie_cap = pci_find_capability(pcr->pci, PCI_CAP_ID_EXP);
@@ -1324,7 +1325,8 @@ static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
 	rtsx_pci_init_ocp(pcr);
 
 	/* Enable clk_request_n to enable clock power management */
-	rtsx_pci_write_config_byte(pcr, pcr->pcie_cap + PCI_EXP_LNKCTL + 1, 1);
+	pcie_capability_write_word(pdev, PCI_EXP_LNKCTL,
+				   PCI_EXP_LNKCTL_CLKREQ_EN);
 	/* Enter L1 when host tx idle */
 	rtsx_pci_write_config_byte(pcr, 0x70F, 0x5B);
 
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/5] misc: rtsx: Remove unused pcie_cap
  2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 1/5] misc: rtsx: Use pcie_capability_clear_and_set_word() for PCI_EXP_LNKCTL Bjorn Helgaas
@ 2020-07-21 21:23 ` Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 3/5] misc: rtsx: Remove rtsx_pci_read/write_config() wrappers Bjorn Helgaas
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Bjorn Helgaas @ 2020-07-21 21:23 UTC (permalink / raw)
  To: Ricky Wu
  Cc: Arnd Bergmann, Greg Kroah-Hartman, Ulf Hansson, Rui Feng,
	Klaus Doth, Linus Walleij, Rui Miguel Silva, Puranjay Mohan,
	linux-kernel, linux-mmc, Bjorn Helgaas

From: Bjorn Helgaas <bhelgaas@google.com>

There are no more uses of struct rtsx_pcr.pcie_cap.  Remove it.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/misc/cardreader/rtsx_pcr.c | 1 -
 include/linux/rtsx_pci.h           | 1 -
 2 files changed, 2 deletions(-)

diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
index 6a4d6c8f4e71..169505165a52 100644
--- a/drivers/misc/cardreader/rtsx_pcr.c
+++ b/drivers/misc/cardreader/rtsx_pcr.c
@@ -1234,7 +1234,6 @@ static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
 	struct pci_dev *pdev = pcr->pci;
 	int err;
 
-	pcr->pcie_cap = pci_find_capability(pcr->pci, PCI_CAP_ID_EXP);
 	rtsx_pci_writel(pcr, RTSX_HCBAR, pcr->host_cmds_addr);
 
 	rtsx_pci_enable_bus_int(pcr);
diff --git a/include/linux/rtsx_pci.h b/include/linux/rtsx_pci.h
index e8780d4e4636..b1071c80fffc 100644
--- a/include/linux/rtsx_pci.h
+++ b/include/linux/rtsx_pci.h
@@ -1158,7 +1158,6 @@ struct rtsx_hw_param {
 struct rtsx_pcr {
 	struct pci_dev			*pci;
 	unsigned int			id;
-	int				pcie_cap;
 	struct rtsx_cr_option	option;
 	struct rtsx_hw_param hw_param;
 
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 3/5] misc: rtsx: Remove rtsx_pci_read/write_config() wrappers
  2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 1/5] misc: rtsx: Use pcie_capability_clear_and_set_word() for PCI_EXP_LNKCTL Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 2/5] misc: rtsx: Remove unused pcie_cap Bjorn Helgaas
@ 2020-07-21 21:23 ` Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 4/5] misc: rtsx: Find L1 PM Substates capability instead of hard-coding Bjorn Helgaas
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Bjorn Helgaas @ 2020-07-21 21:23 UTC (permalink / raw)
  To: Ricky Wu
  Cc: Arnd Bergmann, Greg Kroah-Hartman, Ulf Hansson, Rui Feng,
	Klaus Doth, Linus Walleij, Rui Miguel Silva, Puranjay Mohan,
	linux-kernel, linux-mmc, Bjorn Helgaas

From: Bjorn Helgaas <bhelgaas@google.com>

rtsx_pci_read_config_dword() and similar wrappers around the PCI config
accessors add very little value, and they obscure the fact that often we
are accessing standard PCI registers that should be coordinated with the
PCI core.

Remove the wrappers and use the PCI config accessors directly.  No
functional change intended.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/misc/cardreader/rtl8411.c  |  8 +++++---
 drivers/misc/cardreader/rts5209.c  |  5 +++--
 drivers/misc/cardreader/rts5227.c  |  5 +++--
 drivers/misc/cardreader/rts5229.c  |  5 +++--
 drivers/misc/cardreader/rts5249.c  | 12 +++++++-----
 drivers/misc/cardreader/rts5260.c  | 10 ++++++----
 drivers/misc/cardreader/rts5261.c  | 19 +++++++++++--------
 drivers/misc/cardreader/rtsx_pcr.c |  2 +-
 include/linux/rtsx_pci.h           | 12 ------------
 9 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/drivers/misc/cardreader/rtl8411.c b/drivers/misc/cardreader/rtl8411.c
index 489ebe907688..a07674ed0596 100644
--- a/drivers/misc/cardreader/rtl8411.c
+++ b/drivers/misc/cardreader/rtl8411.c
@@ -37,10 +37,11 @@ static int rtl8411b_is_qfn48(struct rtsx_pcr *pcr)
 
 static void rtl8411_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg1 = 0;
 	u8 reg3 = 0;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg1);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg1);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg1);
 
 	if (!rtsx_vendor_setting_valid(reg1))
@@ -52,16 +53,17 @@ static void rtl8411_fetch_vendor_settings(struct rtsx_pcr *pcr)
 	pcr->card_drive_sel &= 0x3F;
 	pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg1);
 
-	rtsx_pci_read_config_byte(pcr, PCR_SETTING_REG3, &reg3);
+	pci_read_config_byte(pdev, PCR_SETTING_REG3, &reg3);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG3, reg3);
 	pcr->sd30_drive_sel_3v3 = rtl8411_reg_to_sd30_drive_sel_3v3(reg3);
 }
 
 static void rtl8411b_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg = 0;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	if (!rtsx_vendor_setting_valid(reg))
diff --git a/drivers/misc/cardreader/rts5209.c b/drivers/misc/cardreader/rts5209.c
index 659056164b21..39a6a7ecc32e 100644
--- a/drivers/misc/cardreader/rts5209.c
+++ b/drivers/misc/cardreader/rts5209.c
@@ -23,9 +23,10 @@ static u8 rts5209_get_ic_version(struct rtsx_pcr *pcr)
 
 static void rts5209_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	if (rts5209_vendor_setting1_valid(reg)) {
@@ -34,7 +35,7 @@ static void rts5209_fetch_vendor_settings(struct rtsx_pcr *pcr)
 		pcr->aspm_en = rts5209_reg_to_aspm(reg);
 	}
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg);
 
 	if (rts5209_vendor_setting2_valid(reg)) {
diff --git a/drivers/misc/cardreader/rts5227.c b/drivers/misc/cardreader/rts5227.c
index 3a9467aaa435..f5f392ddf3d6 100644
--- a/drivers/misc/cardreader/rts5227.c
+++ b/drivers/misc/cardreader/rts5227.c
@@ -56,9 +56,10 @@ static void rts5227_fill_driving(struct rtsx_pcr *pcr, u8 voltage)
 
 static void rts5227_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	if (!rtsx_vendor_setting_valid(reg))
@@ -69,7 +70,7 @@ static void rts5227_fetch_vendor_settings(struct rtsx_pcr *pcr)
 	pcr->card_drive_sel &= 0x3F;
 	pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg);
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg);
 	pcr->sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg);
 	if (rtsx_reg_check_reverse_socket(reg))
diff --git a/drivers/misc/cardreader/rts5229.c b/drivers/misc/cardreader/rts5229.c
index 9f080a32ef50..89e6f124ca5c 100644
--- a/drivers/misc/cardreader/rts5229.c
+++ b/drivers/misc/cardreader/rts5229.c
@@ -23,9 +23,10 @@ static u8 rts5229_get_ic_version(struct rtsx_pcr *pcr)
 
 static void rts5229_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	if (!rtsx_vendor_setting_valid(reg))
@@ -37,7 +38,7 @@ static void rts5229_fetch_vendor_settings(struct rtsx_pcr *pcr)
 	pcr->card_drive_sel &= 0x3F;
 	pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg);
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg);
 	pcr->sd30_drive_sel_3v3 =
 		map_sd_drive(rtsx_reg_to_sd30_drive_sel_3v3(reg));
diff --git a/drivers/misc/cardreader/rts5249.c b/drivers/misc/cardreader/rts5249.c
index 6c6c9e95a29f..665472d05993 100644
--- a/drivers/misc/cardreader/rts5249.c
+++ b/drivers/misc/cardreader/rts5249.c
@@ -55,9 +55,10 @@ static void rts5249_fill_driving(struct rtsx_pcr *pcr, u8 voltage)
 
 static void rtsx_base_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	if (!rtsx_vendor_setting_valid(reg)) {
@@ -70,7 +71,7 @@ static void rtsx_base_fetch_vendor_settings(struct rtsx_pcr *pcr)
 	pcr->card_drive_sel &= 0x3F;
 	pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg);
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg);
 	pcr->sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg);
 	if (rtsx_reg_check_reverse_socket(reg))
@@ -93,14 +94,15 @@ static void rtsx_base_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
 
 static void rts5249_init_from_cfg(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	struct rtsx_cr_option *option = &(pcr->option);
 	u32 lval;
 
 	if (CHK_PCI_PID(pcr, PID_524A))
-		rtsx_pci_read_config_dword(pcr,
+		pci_read_config_dword(pdev,
 			PCR_ASPM_SETTING_REG1, &lval);
 	else
-		rtsx_pci_read_config_dword(pcr,
+		pci_read_config_dword(pdev,
 			PCR_ASPM_SETTING_REG2, &lval);
 
 	if (lval & ASPM_L1_1_EN_MASK)
@@ -118,7 +120,7 @@ static void rts5249_init_from_cfg(struct rtsx_pcr *pcr)
 	if (option->ltr_en) {
 		u16 val;
 
-		pcie_capability_read_word(pcr->pci, PCI_EXP_DEVCTL2, &val);
+		pcie_capability_read_word(pdev, PCI_EXP_DEVCTL2, &val);
 		if (val & PCI_EXP_DEVCTL2_LTR_EN) {
 			option->ltr_enabled = true;
 			option->ltr_active = true;
diff --git a/drivers/misc/cardreader/rts5260.c b/drivers/misc/cardreader/rts5260.c
index 7a9dbb778e84..0e806dd7ad08 100644
--- a/drivers/misc/cardreader/rts5260.c
+++ b/drivers/misc/cardreader/rts5260.c
@@ -64,9 +64,10 @@ static void rts5260_fill_driving(struct rtsx_pcr *pcr, u8 voltage)
 
 static void rtsx_base_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg;
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	if (!rtsx_vendor_setting_valid(reg)) {
@@ -79,7 +80,7 @@ static void rtsx_base_fetch_vendor_settings(struct rtsx_pcr *pcr)
 	pcr->card_drive_sel &= 0x3F;
 	pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg);
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg);
 	pcr->sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg);
 	if (rtsx_reg_check_reverse_socket(reg))
@@ -496,10 +497,11 @@ static void rts5260_pwr_saving_setting(struct rtsx_pcr *pcr)
 
 static void rts5260_init_from_cfg(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	struct rtsx_cr_option *option = &pcr->option;
 	u32 lval;
 
-	rtsx_pci_read_config_dword(pcr, PCR_ASPM_SETTING_5260, &lval);
+	pci_read_config_dword(pdev, PCR_ASPM_SETTING_5260, &lval);
 
 	if (lval & ASPM_L1_1_EN_MASK)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
@@ -518,7 +520,7 @@ static void rts5260_init_from_cfg(struct rtsx_pcr *pcr)
 	if (option->ltr_en) {
 		u16 val;
 
-		pcie_capability_read_word(pcr->pci, PCI_EXP_DEVCTL2, &val);
+		pcie_capability_read_word(pdev, PCI_EXP_DEVCTL2, &val);
 		if (val & PCI_EXP_DEVCTL2_LTR_EN) {
 			option->ltr_enabled = true;
 			option->ltr_active = true;
diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
index 195822ec858e..4f30637ee4ac 100644
--- a/drivers/misc/cardreader/rts5261.c
+++ b/drivers/misc/cardreader/rts5261.c
@@ -59,9 +59,11 @@ static void rts5261_fill_driving(struct rtsx_pcr *pcr, u8 voltage)
 
 static void rtsx5261_fetch_vendor_settings(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 reg;
+
 	/* 0x814~0x817 */
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg);
 
 	if (!rts5261_vendor_setting_valid(reg)) {
@@ -76,7 +78,7 @@ static void rtsx5261_fetch_vendor_settings(struct rtsx_pcr *pcr)
 		pcr->flags |= PCR_REVERSE_SOCKET;
 
 	/* 0x724~0x727 */
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, &reg);
+	pci_read_config_dword(pdev, PCR_SETTING_REG1, &reg);
 	pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg);
 
 	pcr->aspm_en = rts5261_reg_to_aspm(reg);
@@ -361,6 +363,7 @@ static void rts5261_process_ocp(struct rtsx_pcr *pcr)
 
 static int rts5261_init_from_hw(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	int retval;
 	u32 lval, i;
 	u8 valid, efuse_valid, tmp;
@@ -386,8 +389,7 @@ static int rts5261_init_from_hw(struct rtsx_pcr *pcr)
 	pcr_dbg(pcr, "Load efuse valid: 0x%x\n", efuse_valid);
 
 	if (efuse_valid == 0) {
-		retval = rtsx_pci_read_config_dword(pcr,
-			PCR_SETTING_REG2, &lval);
+		retval = pci_read_config_dword(pdev, PCR_SETTING_REG2, &lval);
 		if (retval != 0)
 			pcr_dbg(pcr, "read 0x814 DW fail\n");
 		pcr_dbg(pcr, "DW from 0x814: 0x%x\n", lval);
@@ -399,9 +401,9 @@ static int rts5261_init_from_hw(struct rtsx_pcr *pcr)
 		REG_EFUSE_POR, 0);
 	pcr_dbg(pcr, "Disable efuse por!\n");
 
-	rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, &lval);
+	pci_read_config_dword(pdev, PCR_SETTING_REG2, &lval);
 	lval = lval & 0x00FFFFFF;
-	retval = rtsx_pci_write_config_dword(pcr, PCR_SETTING_REG2, lval);
+	retval = pci_write_config_dword(pdev, PCR_SETTING_REG2, lval);
 	if (retval != 0)
 		pcr_dbg(pcr, "write config fail\n");
 
@@ -410,10 +412,11 @@ static int rts5261_init_from_hw(struct rtsx_pcr *pcr)
 
 static void rts5261_init_from_cfg(struct rtsx_pcr *pcr)
 {
+	struct pci_dev *pdev = pcr->pci;
 	u32 lval;
 	struct rtsx_cr_option *option = &pcr->option;
 
-	rtsx_pci_read_config_dword(pcr, PCR_ASPM_SETTING_REG1, &lval);
+	pci_read_config_dword(pdev, PCR_ASPM_SETTING_REG1, &lval);
 
 	if (lval & ASPM_L1_1_EN_MASK)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
@@ -439,7 +442,7 @@ static void rts5261_init_from_cfg(struct rtsx_pcr *pcr)
 	if (option->ltr_en) {
 		u16 val;
 
-		pcie_capability_read_word(pcr->pci, PCI_EXP_DEVCTL2, &val);
+		pcie_capability_read_word(pdev, PCI_EXP_DEVCTL2, &val);
 		if (val & PCI_EXP_DEVCTL2_LTR_EN) {
 			option->ltr_enabled = true;
 			option->ltr_active = true;
diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
index 169505165a52..f0a1bee735b5 100644
--- a/drivers/misc/cardreader/rtsx_pcr.c
+++ b/drivers/misc/cardreader/rtsx_pcr.c
@@ -1327,7 +1327,7 @@ static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
 	pcie_capability_write_word(pdev, PCI_EXP_LNKCTL,
 				   PCI_EXP_LNKCTL_CLKREQ_EN);
 	/* Enter L1 when host tx idle */
-	rtsx_pci_write_config_byte(pcr, 0x70F, 0x5B);
+	pci_write_config_byte(pdev, 0x70F, 0x5B);
 
 	if (pcr->ops->extra_init_hw) {
 		err = pcr->ops->extra_init_hw(pcr);
diff --git a/include/linux/rtsx_pci.h b/include/linux/rtsx_pci.h
index b1071c80fffc..87eafba55749 100644
--- a/include/linux/rtsx_pci.h
+++ b/include/linux/rtsx_pci.h
@@ -99,18 +99,6 @@
 #define rtsx_pci_readb(pcr, reg) \
 	ioread8((pcr)->remap_addr + reg)
 
-#define rtsx_pci_read_config_byte(pcr, where, val) \
-	pci_read_config_byte((pcr)->pci, where, val)
-
-#define rtsx_pci_write_config_byte(pcr, where, val) \
-	pci_write_config_byte((pcr)->pci, where, val)
-
-#define rtsx_pci_read_config_dword(pcr, where, val) \
-	pci_read_config_dword((pcr)->pci, where, val)
-
-#define rtsx_pci_write_config_dword(pcr, where, val) \
-	pci_write_config_dword((pcr)->pci, where, val)
-
 #define STATE_TRANS_NONE		0
 #define STATE_TRANS_CMD			1
 #define STATE_TRANS_BUF			2
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 4/5] misc: rtsx: Find L1 PM Substates capability instead of hard-coding
  2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
                   ` (2 preceding siblings ...)
  2020-07-21 21:23 ` [PATCH 3/5] misc: rtsx: Remove rtsx_pci_read/write_config() wrappers Bjorn Helgaas
@ 2020-07-21 21:23 ` Bjorn Helgaas
  2020-07-21 21:23 ` [PATCH 5/5] misc: rtsx: Use standard PCI definitions Bjorn Helgaas
  2020-07-21 21:28 ` [PATCH 0/5] minor rtsx cleanups Arnd Bergmann
  5 siblings, 0 replies; 9+ messages in thread
From: Bjorn Helgaas @ 2020-07-21 21:23 UTC (permalink / raw)
  To: Ricky Wu
  Cc: Arnd Bergmann, Greg Kroah-Hartman, Ulf Hansson, Rui Feng,
	Klaus Doth, Linus Walleij, Rui Miguel Silva, Puranjay Mohan,
	linux-kernel, linux-mmc, Bjorn Helgaas

From: Bjorn Helgaas <bhelgaas@google.com>

Instead of hard-coding the location of the L1 PM Substates capability based
on the Device ID, search for it in the extended capabilities list.  This
works for any device, as long as it implements the L1 PM Substates
capability correctly, so it doesn't require maintenance as new devices are
added.  No functional change intended.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/misc/cardreader/rts5249.c | 12 ++++++------
 drivers/misc/cardreader/rts5260.c |  7 ++++++-
 drivers/misc/cardreader/rts5261.c |  7 ++++++-
 include/linux/rtsx_pci.h          |  4 ----
 4 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/misc/cardreader/rts5249.c b/drivers/misc/cardreader/rts5249.c
index 665472d05993..1b8149e806c1 100644
--- a/drivers/misc/cardreader/rts5249.c
+++ b/drivers/misc/cardreader/rts5249.c
@@ -95,15 +95,15 @@ static void rtsx_base_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
 static void rts5249_init_from_cfg(struct rtsx_pcr *pcr)
 {
 	struct pci_dev *pdev = pcr->pci;
+	int l1ss;
 	struct rtsx_cr_option *option = &(pcr->option);
 	u32 lval;
 
-	if (CHK_PCI_PID(pcr, PID_524A))
-		pci_read_config_dword(pdev,
-			PCR_ASPM_SETTING_REG1, &lval);
-	else
-		pci_read_config_dword(pdev,
-			PCR_ASPM_SETTING_REG2, &lval);
+	l1ss = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_L1SS);
+	if (!l1ss)
+		return;
+
+	pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, &lval);
 
 	if (lval & ASPM_L1_1_EN_MASK)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
diff --git a/drivers/misc/cardreader/rts5260.c b/drivers/misc/cardreader/rts5260.c
index 0e806dd7ad08..ebf77643cc90 100644
--- a/drivers/misc/cardreader/rts5260.c
+++ b/drivers/misc/cardreader/rts5260.c
@@ -498,10 +498,15 @@ static void rts5260_pwr_saving_setting(struct rtsx_pcr *pcr)
 static void rts5260_init_from_cfg(struct rtsx_pcr *pcr)
 {
 	struct pci_dev *pdev = pcr->pci;
+	int l1ss;
 	struct rtsx_cr_option *option = &pcr->option;
 	u32 lval;
 
-	pci_read_config_dword(pdev, PCR_ASPM_SETTING_5260, &lval);
+	l1ss = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_L1SS);
+	if (!l1ss)
+		return;
+
+	pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, &lval);
 
 	if (lval & ASPM_L1_1_EN_MASK)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
index 4f30637ee4ac..4b6e3fe4a007 100644
--- a/drivers/misc/cardreader/rts5261.c
+++ b/drivers/misc/cardreader/rts5261.c
@@ -413,10 +413,15 @@ static int rts5261_init_from_hw(struct rtsx_pcr *pcr)
 static void rts5261_init_from_cfg(struct rtsx_pcr *pcr)
 {
 	struct pci_dev *pdev = pcr->pci;
+	int l1ss;
 	u32 lval;
 	struct rtsx_cr_option *option = &pcr->option;
 
-	pci_read_config_dword(pdev, PCR_ASPM_SETTING_REG1, &lval);
+	l1ss = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_L1SS);
+	if (!l1ss)
+		return;
+
+	pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, &lval);
 
 	if (lval & ASPM_L1_1_EN_MASK)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
diff --git a/include/linux/rtsx_pci.h b/include/linux/rtsx_pci.h
index 87eafba55749..f1e27b858972 100644
--- a/include/linux/rtsx_pci.h
+++ b/include/linux/rtsx_pci.h
@@ -1029,10 +1029,6 @@
 #define   PHY_DIG1E_RX_EN_KEEP		0x0001
 #define PHY_DUM_REG			0x1F
 
-#define PCR_ASPM_SETTING_REG1		0x160
-#define PCR_ASPM_SETTING_REG2		0x168
-#define PCR_ASPM_SETTING_5260		0x178
-
 #define PCR_SETTING_REG1		0x724
 #define PCR_SETTING_REG2		0x814
 #define PCR_SETTING_REG3		0x747
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 5/5] misc: rtsx: Use standard PCI definitions
  2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
                   ` (3 preceding siblings ...)
  2020-07-21 21:23 ` [PATCH 4/5] misc: rtsx: Find L1 PM Substates capability instead of hard-coding Bjorn Helgaas
@ 2020-07-21 21:23 ` Bjorn Helgaas
  2020-07-21 21:28 ` [PATCH 0/5] minor rtsx cleanups Arnd Bergmann
  5 siblings, 0 replies; 9+ messages in thread
From: Bjorn Helgaas @ 2020-07-21 21:23 UTC (permalink / raw)
  To: Ricky Wu
  Cc: Arnd Bergmann, Greg Kroah-Hartman, Ulf Hansson, Rui Feng,
	Klaus Doth, Linus Walleij, Rui Miguel Silva, Puranjay Mohan,
	linux-kernel, linux-mmc, Bjorn Helgaas

From: Bjorn Helgaas <bhelgaas@google.com>

When reading registers defined by the PCIe spec, use the names already
defined by the PCI core.  This makes maintenance of the PCI core and
drivers easier.  No functional change intended.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/misc/cardreader/rts5249.c | 8 ++++----
 drivers/misc/cardreader/rts5260.c | 8 ++++----
 drivers/misc/cardreader/rts5261.c | 8 ++++----
 include/linux/rtsx_pci.h          | 5 -----
 4 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/drivers/misc/cardreader/rts5249.c b/drivers/misc/cardreader/rts5249.c
index 1b8149e806c1..941b3d77f1e9 100644
--- a/drivers/misc/cardreader/rts5249.c
+++ b/drivers/misc/cardreader/rts5249.c
@@ -105,16 +105,16 @@ static void rts5249_init_from_cfg(struct rtsx_pcr *pcr)
 
 	pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, &lval);
 
-	if (lval & ASPM_L1_1_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_ASPM_L1_1)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
 
-	if (lval & ASPM_L1_2_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_ASPM_L1_2)
 		rtsx_set_dev_flag(pcr, ASPM_L1_2_EN);
 
-	if (lval & PM_L1_1_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_PCIPM_L1_1)
 		rtsx_set_dev_flag(pcr, PM_L1_1_EN);
 
-	if (lval & PM_L1_2_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_PCIPM_L1_2)
 		rtsx_set_dev_flag(pcr, PM_L1_2_EN);
 
 	if (option->ltr_en) {
diff --git a/drivers/misc/cardreader/rts5260.c b/drivers/misc/cardreader/rts5260.c
index ebf77643cc90..b9f66b1384a6 100644
--- a/drivers/misc/cardreader/rts5260.c
+++ b/drivers/misc/cardreader/rts5260.c
@@ -508,16 +508,16 @@ static void rts5260_init_from_cfg(struct rtsx_pcr *pcr)
 
 	pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, &lval);
 
-	if (lval & ASPM_L1_1_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_ASPM_L1_1)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
 
-	if (lval & ASPM_L1_2_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_ASPM_L1_2)
 		rtsx_set_dev_flag(pcr, ASPM_L1_2_EN);
 
-	if (lval & PM_L1_1_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_PCIPM_L1_1)
 		rtsx_set_dev_flag(pcr, PM_L1_1_EN);
 
-	if (lval & PM_L1_2_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_PCIPM_L1_2)
 		rtsx_set_dev_flag(pcr, PM_L1_2_EN);
 
 	rts5260_pwr_saving_setting(pcr);
diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
index 4b6e3fe4a007..471961487ff8 100644
--- a/drivers/misc/cardreader/rts5261.c
+++ b/drivers/misc/cardreader/rts5261.c
@@ -423,22 +423,22 @@ static void rts5261_init_from_cfg(struct rtsx_pcr *pcr)
 
 	pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, &lval);
 
-	if (lval & ASPM_L1_1_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_ASPM_L1_1)
 		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
 	else
 		rtsx_clear_dev_flag(pcr, ASPM_L1_1_EN);
 
-	if (lval & ASPM_L1_2_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_ASPM_L1_2)
 		rtsx_set_dev_flag(pcr, ASPM_L1_2_EN);
 	else
 		rtsx_clear_dev_flag(pcr, ASPM_L1_2_EN);
 
-	if (lval & PM_L1_1_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_PCIPM_L1_1)
 		rtsx_set_dev_flag(pcr, PM_L1_1_EN);
 	else
 		rtsx_clear_dev_flag(pcr, PM_L1_1_EN);
 
-	if (lval & PM_L1_2_EN_MASK)
+	if (lval & PCI_L1SS_CTL1_PCIPM_L1_2)
 		rtsx_set_dev_flag(pcr, PM_L1_2_EN);
 	else
 		rtsx_clear_dev_flag(pcr, PM_L1_2_EN);
diff --git a/include/linux/rtsx_pci.h b/include/linux/rtsx_pci.h
index f1e27b858972..9f70cdedb124 100644
--- a/include/linux/rtsx_pci.h
+++ b/include/linux/rtsx_pci.h
@@ -1075,11 +1075,6 @@ struct pcr_ops {
 
 enum PDEV_STAT  {PDEV_STAT_IDLE, PDEV_STAT_RUN};
 
-#define ASPM_L1_1_EN_MASK		BIT(3)
-#define ASPM_L1_2_EN_MASK		BIT(2)
-#define PM_L1_1_EN_MASK		BIT(1)
-#define PM_L1_2_EN_MASK		BIT(0)
-
 #define ASPM_L1_1_EN			BIT(0)
 #define ASPM_L1_2_EN			BIT(1)
 #define PM_L1_1_EN				BIT(2)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/5] minor rtsx cleanups
  2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
                   ` (4 preceding siblings ...)
  2020-07-21 21:23 ` [PATCH 5/5] misc: rtsx: Use standard PCI definitions Bjorn Helgaas
@ 2020-07-21 21:28 ` Arnd Bergmann
  2020-07-23  8:16   ` 吳昊澄 Ricky
  5 siblings, 1 reply; 9+ messages in thread
From: Arnd Bergmann @ 2020-07-21 21:28 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Ricky Wu, Greg Kroah-Hartman, Ulf Hansson, Rui Feng, Klaus Doth,
	Linus Walleij, Rui Miguel Silva, Puranjay Mohan, linux-kernel,
	linux-mmc, Bjorn Helgaas

On Tue, Jul 21, 2020 at 11:23 PM Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> From: Bjorn Helgaas <bhelgaas@google.com>
>
> Clean up some needlessly device-specific stuff in the Realtek card reader
> drivers.
>
> This implements some of my suggestions from
> https://lore.kernel.org/r/20200720220651.GA1035857@bjorn-Precision-5520
>
> This will conflict with Ricky's post here:
> https://lore.kernel.org/r/20200706070259.32565-1-ricky_wu@realtek.com
>
> I'll be happy to update this on top of Ricky's patch after it's applied, or
> Ricky could pick up these patches and base his on top.


Looks all good to me,

Acked-by: Arnd Bergmann <arnd@arndb.de>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH 0/5] minor rtsx cleanups
  2020-07-21 21:28 ` [PATCH 0/5] minor rtsx cleanups Arnd Bergmann
@ 2020-07-23  8:16   ` 吳昊澄 Ricky
  2020-07-23  8:28     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 9+ messages in thread
From: 吳昊澄 Ricky @ 2020-07-23  8:16 UTC (permalink / raw)
  To: Arnd Bergmann, Bjorn Helgaas
  Cc: Greg Kroah-Hartman, Ulf Hansson, Rui Feng, Klaus Doth,
	Linus Walleij, Rui Miguel Silva, Puranjay Mohan, linux-kernel,
	linux-mmc, Bjorn Helgaas

Hi Arnd, Bjorn,

So How can I do for now?
I need to wait Bjorn's patch applied and resubmit patch for our new chip RTS5228 base on Bjorn's patch or ?

Ricky


> -----Original Message-----
> From: Arnd Bergmann [mailto:arnd@arndb.de]
> Sent: Wednesday, July 22, 2020 5:29 AM
> To: Bjorn Helgaas
> Cc: 吳昊澄 Ricky; Greg Kroah-Hartman; Ulf Hansson; Rui Feng; Klaus Doth;
> Linus Walleij; Rui Miguel Silva; Puranjay Mohan; linux-kernel@vger.kernel.org;
> linux-mmc; Bjorn Helgaas
> Subject: Re: [PATCH 0/5] minor rtsx cleanups
> 
> On Tue, Jul 21, 2020 at 11:23 PM Bjorn Helgaas <helgaas@kernel.org> wrote:
> >
> > From: Bjorn Helgaas <bhelgaas@google.com>
> >
> > Clean up some needlessly device-specific stuff in the Realtek card reader
> > drivers.
> >
> > This implements some of my suggestions from
> > https://lore.kernel.org/r/20200720220651.GA1035857@bjorn-Precision-5520
> >
> > This will conflict with Ricky's post here:
> > https://lore.kernel.org/r/20200706070259.32565-1-ricky_wu@realtek.com
> >
> > I'll be happy to update this on top of Ricky's patch after it's applied, or
> > Ricky could pick up these patches and base his on top.
> 
> 
> Looks all good to me,
> 
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> 
> ------Please consider the environment before printing this e-mail.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/5] minor rtsx cleanups
  2020-07-23  8:16   ` 吳昊澄 Ricky
@ 2020-07-23  8:28     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 9+ messages in thread
From: Greg Kroah-Hartman @ 2020-07-23  8:28 UTC (permalink / raw)
  To: 吳昊澄 Ricky
  Cc: Arnd Bergmann, Bjorn Helgaas, Ulf Hansson, Rui Feng, Klaus Doth,
	Linus Walleij, Rui Miguel Silva, Puranjay Mohan, linux-kernel,
	linux-mmc, Bjorn Helgaas

On Thu, Jul 23, 2020 at 08:16:10AM +0000, 吳昊澄 Ricky wrote:
> Hi Arnd, Bjorn,
> 
> So How can I do for now?
> I need to wait Bjorn's patch applied and resubmit patch for our new
> chip RTS5228 base on Bjorn's patch or ?

These are all now in my tree, so please feel free to resend any
outstanding patches against it.

But I think I have already applied your patch, right?

If not, please resend as I do not have anything outstanding that I can
see...

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, back to index

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-21 21:23 [PATCH 0/5] minor rtsx cleanups Bjorn Helgaas
2020-07-21 21:23 ` [PATCH 1/5] misc: rtsx: Use pcie_capability_clear_and_set_word() for PCI_EXP_LNKCTL Bjorn Helgaas
2020-07-21 21:23 ` [PATCH 2/5] misc: rtsx: Remove unused pcie_cap Bjorn Helgaas
2020-07-21 21:23 ` [PATCH 3/5] misc: rtsx: Remove rtsx_pci_read/write_config() wrappers Bjorn Helgaas
2020-07-21 21:23 ` [PATCH 4/5] misc: rtsx: Find L1 PM Substates capability instead of hard-coding Bjorn Helgaas
2020-07-21 21:23 ` [PATCH 5/5] misc: rtsx: Use standard PCI definitions Bjorn Helgaas
2020-07-21 21:28 ` [PATCH 0/5] minor rtsx cleanups Arnd Bergmann
2020-07-23  8:16   ` 吳昊澄 Ricky
2020-07-23  8:28     ` Greg Kroah-Hartman

Linux-mmc Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-mmc/0 linux-mmc/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-mmc linux-mmc/ https://lore.kernel.org/linux-mmc \
		linux-mmc@vger.kernel.org
	public-inbox-index linux-mmc

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-mmc


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git