linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH v6] mfd: Add support for RTS5250S power saving
       [not found] <1504772799-15173-1-git-send-email-rui_feng@realsil.com.cn>
@ 2017-12-14 22:25 ` Bjorn Helgaas
  2017-12-15  7:41   ` Hans de Goede
  2017-12-15  9:42   ` 答复: " 冯锐
  0 siblings, 2 replies; 10+ messages in thread
From: Bjorn Helgaas @ 2017-12-14 22:25 UTC (permalink / raw)
  To: rui_feng; +Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

[+cc Hans, Dave, linux-pci]

On Thu, Sep 07, 2017 at 04:26:39PM +0800, rui_feng@realsil.com.cn wrote:
> From: Rui Feng <rui_feng@realsil.com.cn>

I wish this had been posted to linux-pci before being merged.

I'm concerned because some of this appears to overlap and
conflict with PCI core management of ASPM.

I assume these devices advertise ASPM support in their Link
Capabilites registers, right?  If so, why isn't the existing
PCI core ASPM support sufficient?

> Enable power saving for RTS5250S as following steps:
> 1.Set 0xFE58 to enable clock power management.

Is this clock power management something specific to RTS5250S, or is
it standard PCIe architected stuff?

> 2.Check cfg space whether support L1SS or not.

This sounds like standard PCIe ASPM L1 Substates, right?

> 3.If support L1SS, set 0xFF03 to free clkreq.
> 4.When entering idle status, enable aspm
>   and set parameters for L1SS and LTR.
> 5.Wnen entering run status, disable aspm
>   and set parameters for L1SS and LTR.

In general, drivers should not configure ASPM, L1SS, and LTR
themselves; the PCI core should do that.

If a driver needs to tweak ASPM at run-time, it should use interfaces
exported by the PCI core to do so.

> If entering L1SS mode successfully,
> electric current will be below 2mA.

> Signed-off-by: Rui Feng <rui_feng@realsil.com.cn>
> ...

> +static void rts5249_init_from_cfg(struct rtsx_pcr *pcr)
> +{
> +	struct rtsx_cr_option *option = &(pcr->option);
> +	u32 lval;
> +
> +	if (CHK_PCI_PID(pcr, PID_524A))
> +		rtsx_pci_read_config_dword(pcr,
> +			PCR_ASPM_SETTING_REG1, &lval);
> +	else
> +		rtsx_pci_read_config_dword(pcr,
> +			PCR_ASPM_SETTING_REG2, &lval);

This looks like you're reading the ASPM L1 Substates capability, i.e.,
PCI_L1SS_CAP, using hard-coded offsets based on the Device ID.  You
should be using pci_find_ext_capability() to locate it.

> +	if (lval & ASPM_L1_1_EN_MASK)
> +		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
> +
> +	if (lval & ASPM_L1_2_EN_MASK)
> +		rtsx_set_dev_flag(pcr, ASPM_L1_2_EN);
> +
> +	if (lval & PM_L1_1_EN_MASK)
> +		rtsx_set_dev_flag(pcr, PM_L1_1_EN);
> +
> +	if (lval & PM_L1_2_EN_MASK)
> +		rtsx_set_dev_flag(pcr, PM_L1_2_EN);

You're adding these:

  #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)

The PCI core already defines these and you should use them instead:

  #define  PCI_L1SS_CAP_PCIPM_L1_2        0x00000001  /* PCI-PM L1.2 Supported */
  #define  PCI_L1SS_CAP_PCIPM_L1_1        0x00000002  /* PCI-PM L1.1 Supported */
  #define  PCI_L1SS_CAP_ASPM_L1_2         0x00000004  /* ASPM L1.2 Supported */
  #define  PCI_L1SS_CAP_ASPM_L1_1         0x00000008  /* ASPM L1.1 Supported */

> +	if (option->ltr_en) {
> +		u16 val;
> +
> +		pcie_capability_read_word(pcr->pci, PCI_EXP_DEVCTL2, &val);
> +		if (val & PCI_EXP_DEVCTL2_LTR_EN) {
> +			option->ltr_enabled = true;
> +			option->ltr_active = true;

ltr_active is never actually used.

> +			rtsx_set_ltr_latency(pcr, option->ltr_active_latency);
> +		} else {
> +			option->ltr_enabled = false;
> +		}
> +	}
> +}
> ...

> +static void rts5249_set_aspm(struct rtsx_pcr *pcr, bool enable)
> +{
> +	struct rtsx_cr_option *option = &pcr->option;
> +	u8 val = 0;
> +
> +	if (pcr->aspm_enabled == enable)
> +		return;
> +
> +	if (option->dev_aspm_mode == DEV_ASPM_DYNAMIC) {
> +		if (enable)
> +			val = pcr->aspm_en;
> +		rtsx_pci_update_cfg_byte(pcr,
> +			pcr->pcie_cap + PCI_EXP_LNKCTL,
> +			ASPM_MASK_NEG, val);

This stomps on whatever ASPM configuration the PCI core did.

> +	} else if (option->dev_aspm_mode == DEV_ASPM_BACKDOOR) {

DEV_ASPM_BACKDOOR is never set, so this looks like dead code.

> +		u8 mask = FORCE_ASPM_VAL_MASK | FORCE_ASPM_CTL0;
> +		if (!enable)
> +			val = FORCE_ASPM_CTL0;
> +		rtsx_pci_write_register(pcr, ASPM_FORCE_CTL, mask, val);
> +	}
> +
> +	pcr->aspm_enabled = enable;
> +}

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

* Re: [PATCH v6] mfd: Add support for RTS5250S power saving
  2017-12-14 22:25 ` [PATCH v6] mfd: Add support for RTS5250S power saving Bjorn Helgaas
@ 2017-12-15  7:41   ` Hans de Goede
  2017-12-15  9:42   ` 答复: " 冯锐
  1 sibling, 0 replies; 10+ messages in thread
From: Hans de Goede @ 2017-12-15  7:41 UTC (permalink / raw)
  To: Bjorn Helgaas, rui_feng; +Cc: lee.jones, linux-kernel, Dave Jiang, linux-pci

Hi,

On 14-12-17 23:25, Bjorn Helgaas wrote:
> [+cc Hans, Dave, linux-pci]

I appreciate the Cc but I'm not really involved in this, other
then fixing the original commit up so that the T440s can reach
idle-state PC7 again, instead of only going to PC3.

With that said, for any fixes to this please Cc me so that I can
test that the T440s does not regress again.

Regards,

Hans


> 
> On Thu, Sep 07, 2017 at 04:26:39PM +0800, rui_feng@realsil.com.cn wrote:
>> From: Rui Feng <rui_feng@realsil.com.cn>
> 
> I wish this had been posted to linux-pci before being merged.
> 
> I'm concerned because some of this appears to overlap and
> conflict with PCI core management of ASPM.
> 
> I assume these devices advertise ASPM support in their Link
> Capabilites registers, right?  If so, why isn't the existing
> PCI core ASPM support sufficient?
> 
>> Enable power saving for RTS5250S as following steps:
>> 1.Set 0xFE58 to enable clock power management.
> 
> Is this clock power management something specific to RTS5250S, or is
> it standard PCIe architected stuff?
> 
>> 2.Check cfg space whether support L1SS or not.
> 
> This sounds like standard PCIe ASPM L1 Substates, right?
> 
>> 3.If support L1SS, set 0xFF03 to free clkreq.
>> 4.When entering idle status, enable aspm
>>    and set parameters for L1SS and LTR.
>> 5.Wnen entering run status, disable aspm
>>    and set parameters for L1SS and LTR.
> 
> In general, drivers should not configure ASPM, L1SS, and LTR
> themselves; the PCI core should do that.
> 
> If a driver needs to tweak ASPM at run-time, it should use interfaces
> exported by the PCI core to do so.
> 
>> If entering L1SS mode successfully,
>> electric current will be below 2mA.
> 
>> Signed-off-by: Rui Feng <rui_feng@realsil.com.cn>
>> ...
> 
>> +static void rts5249_init_from_cfg(struct rtsx_pcr *pcr)
>> +{
>> +	struct rtsx_cr_option *option = &(pcr->option);
>> +	u32 lval;
>> +
>> +	if (CHK_PCI_PID(pcr, PID_524A))
>> +		rtsx_pci_read_config_dword(pcr,
>> +			PCR_ASPM_SETTING_REG1, &lval);
>> +	else
>> +		rtsx_pci_read_config_dword(pcr,
>> +			PCR_ASPM_SETTING_REG2, &lval);
> 
> This looks like you're reading the ASPM L1 Substates capability, i.e.,
> PCI_L1SS_CAP, using hard-coded offsets based on the Device ID.  You
> should be using pci_find_ext_capability() to locate it.
> 
>> +	if (lval & ASPM_L1_1_EN_MASK)
>> +		rtsx_set_dev_flag(pcr, ASPM_L1_1_EN);
>> +
>> +	if (lval & ASPM_L1_2_EN_MASK)
>> +		rtsx_set_dev_flag(pcr, ASPM_L1_2_EN);
>> +
>> +	if (lval & PM_L1_1_EN_MASK)
>> +		rtsx_set_dev_flag(pcr, PM_L1_1_EN);
>> +
>> +	if (lval & PM_L1_2_EN_MASK)
>> +		rtsx_set_dev_flag(pcr, PM_L1_2_EN);
> 
> You're adding these:
> 
>    #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)
> 
> The PCI core already defines these and you should use them instead:
> 
>    #define  PCI_L1SS_CAP_PCIPM_L1_2        0x00000001  /* PCI-PM L1.2 Supported */
>    #define  PCI_L1SS_CAP_PCIPM_L1_1        0x00000002  /* PCI-PM L1.1 Supported */
>    #define  PCI_L1SS_CAP_ASPM_L1_2         0x00000004  /* ASPM L1.2 Supported */
>    #define  PCI_L1SS_CAP_ASPM_L1_1         0x00000008  /* ASPM L1.1 Supported */
> 
>> +	if (option->ltr_en) {
>> +		u16 val;
>> +
>> +		pcie_capability_read_word(pcr->pci, PCI_EXP_DEVCTL2, &val);
>> +		if (val & PCI_EXP_DEVCTL2_LTR_EN) {
>> +			option->ltr_enabled = true;
>> +			option->ltr_active = true;
> 
> ltr_active is never actually used.
> 
>> +			rtsx_set_ltr_latency(pcr, option->ltr_active_latency);
>> +		} else {
>> +			option->ltr_enabled = false;
>> +		}
>> +	}
>> +}
>> ...
> 
>> +static void rts5249_set_aspm(struct rtsx_pcr *pcr, bool enable)
>> +{
>> +	struct rtsx_cr_option *option = &pcr->option;
>> +	u8 val = 0;
>> +
>> +	if (pcr->aspm_enabled == enable)
>> +		return;
>> +
>> +	if (option->dev_aspm_mode == DEV_ASPM_DYNAMIC) {
>> +		if (enable)
>> +			val = pcr->aspm_en;
>> +		rtsx_pci_update_cfg_byte(pcr,
>> +			pcr->pcie_cap + PCI_EXP_LNKCTL,
>> +			ASPM_MASK_NEG, val);
> 
> This stomps on whatever ASPM configuration the PCI core did.
> 
>> +	} else if (option->dev_aspm_mode == DEV_ASPM_BACKDOOR) {
> 
> DEV_ASPM_BACKDOOR is never set, so this looks like dead code.
> 
>> +		u8 mask = FORCE_ASPM_VAL_MASK | FORCE_ASPM_CTL0;
>> +		if (!enable)
>> +			val = FORCE_ASPM_CTL0;
>> +		rtsx_pci_write_register(pcr, ASPM_FORCE_CTL, mask, val);
>> +	}
>> +
>> +	pcr->aspm_enabled = enable;
>> +}

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

* 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2017-12-14 22:25 ` [PATCH v6] mfd: Add support for RTS5250S power saving Bjorn Helgaas
  2017-12-15  7:41   ` Hans de Goede
@ 2017-12-15  9:42   ` 冯锐
  2017-12-15 15:15     ` Bjorn Helgaas
  1 sibling, 1 reply; 10+ messages in thread
From: 冯锐 @ 2017-12-15  9:42 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

PiBbK2NjIEhhbnMsIERhdmUsIGxpbnV4LXBjaV0NCj4gDQo+IE9uIFRodSwgU2VwIDA3LCAyMDE3
IGF0IDA0OjI2OjM5UE0gKzA4MDAsIHJ1aV9mZW5nQHJlYWxzaWwuY29tLmNuIHdyb3RlOg0KPiA+
IEZyb206IFJ1aSBGZW5nIDxydWlfZmVuZ0ByZWFsc2lsLmNvbS5jbj4NCj4gDQo+IEkgd2lzaCB0
aGlzIGhhZCBiZWVuIHBvc3RlZCB0byBsaW51eC1wY2kgYmVmb3JlIGJlaW5nIG1lcmdlZC4NCj4g
DQo+IEknbSBjb25jZXJuZWQgYmVjYXVzZSBzb21lIG9mIHRoaXMgYXBwZWFycyB0byBvdmVybGFw
IGFuZCBjb25mbGljdCB3aXRoIFBDSQ0KPiBjb3JlIG1hbmFnZW1lbnQgb2YgQVNQTS4NCj4gDQo+
IEkgYXNzdW1lIHRoZXNlIGRldmljZXMgYWR2ZXJ0aXNlIEFTUE0gc3VwcG9ydCBpbiB0aGVpciBM
aW5rIENhcGFiaWxpdGVzDQo+IHJlZ2lzdGVycywgcmlnaHQ/ICBJZiBzbywgd2h5IGlzbid0IHRo
ZSBleGlzdGluZyBQQ0kgY29yZSBBU1BNIHN1cHBvcnQNCj4gc3VmZmljaWVudD8NCj4gDQpXaGVu
IEwxU1MgaXMgY29uZmlndXJlZCwgdGhlIGRldmljZShoYXJkd2FyZSkgY2FuJ3QgZW50ZXIgTDFT
UyBzdGF0dXMgYXV0b21hdGljYWxseSwNCml0IG5lZWQgZHJpdmVyKHNvZnR3YXJlKSB0byBkbyBz
b21lIHdvcmsgdG8gYWNoaWV2ZSB0aGUgZnVuY3Rpb24uDQoNCj4gPiBFbmFibGUgcG93ZXIgc2F2
aW5nIGZvciBSVFM1MjUwUyBhcyBmb2xsb3dpbmcgc3RlcHM6DQo+ID4gMS5TZXQgMHhGRTU4IHRv
IGVuYWJsZSBjbG9jayBwb3dlciBtYW5hZ2VtZW50Lg0KPiANCj4gSXMgdGhpcyBjbG9jayBwb3dl
ciBtYW5hZ2VtZW50IHNvbWV0aGluZyBzcGVjaWZpYyB0byBSVFM1MjUwUywgb3IgaXMgaXQNCj4g
c3RhbmRhcmQgUENJZSBhcmNoaXRlY3RlZCBzdHVmZj8NCj4gDQoweEZFNTggaXMgc3BlY2lmaWMg
cmVnaXN0ZXIgdG8gUlRTNTI1MFMgbm90IHN0YW5kYXJkIFBDSWUgYXJjaGl0ZWN0ZWQgc3R1ZmYu
DQoNCj4gPiAyLkNoZWNrIGNmZyBzcGFjZSB3aGV0aGVyIHN1cHBvcnQgTDFTUyBvciBub3QuDQo+
IA0KPiBUaGlzIHNvdW5kcyBsaWtlIHN0YW5kYXJkIFBDSWUgQVNQTSBMMSBTdWJzdGF0ZXMsIHJp
Z2h0Pw0KPiANClllcy4NCg0KPiA+IDMuSWYgc3VwcG9ydCBMMVNTLCBzZXQgMHhGRjAzIHRvIGZy
ZWUgY2xrcmVxLg0KPiA+IDQuV2hlbiBlbnRlcmluZyBpZGxlIHN0YXR1cywgZW5hYmxlIGFzcG0N
Cj4gPiAgIGFuZCBzZXQgcGFyYW1ldGVycyBmb3IgTDFTUyBhbmQgTFRSLg0KPiA+IDUuV25lbiBl
bnRlcmluZyBydW4gc3RhdHVzLCBkaXNhYmxlIGFzcG0NCj4gPiAgIGFuZCBzZXQgcGFyYW1ldGVy
cyBmb3IgTDFTUyBhbmQgTFRSLg0KPiANCj4gSW4gZ2VuZXJhbCwgZHJpdmVycyBzaG91bGQgbm90
IGNvbmZpZ3VyZSBBU1BNLCBMMVNTLCBhbmQgTFRSIHRoZW1zZWx2ZXM7IHRoZQ0KPiBQQ0kgY29y
ZSBzaG91bGQgZG8gdGhhdC4NCj4gDQo+IElmIGEgZHJpdmVyIG5lZWRzIHRvIHR3ZWFrIEFTUE0g
YXQgcnVuLXRpbWUsIGl0IHNob3VsZCB1c2UgaW50ZXJmYWNlcyBleHBvcnRlZA0KPiBieSB0aGUg
UENJIGNvcmUgdG8gZG8gc28uDQo+IA0KV2hpY2ggaW50ZXJmYWNlIEkgY2FuIHVzZSB0byBzZXQg
QVNQTT8gSSB1c2UgInBjaV93cml0ZV9jb25maWdfYnl0ZSIgbm93Lg0KDQo+ID4gSWYgZW50ZXJp
bmcgTDFTUyBtb2RlIHN1Y2Nlc3NmdWxseSwNCj4gPiBlbGVjdHJpYyBjdXJyZW50IHdpbGwgYmUg
YmVsb3cgMm1BLg0KPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBSdWkgRmVuZyA8cnVpX2ZlbmdAcmVh
bHNpbC5jb20uY24+IC4uLg0KPiANCj4gPiArc3RhdGljIHZvaWQgcnRzNTI0OV9pbml0X2Zyb21f
Y2ZnKHN0cnVjdCBydHN4X3BjciAqcGNyKSB7DQo+ID4gKwlzdHJ1Y3QgcnRzeF9jcl9vcHRpb24g
Km9wdGlvbiA9ICYocGNyLT5vcHRpb24pOw0KPiA+ICsJdTMyIGx2YWw7DQo+ID4gKw0KPiA+ICsJ
aWYgKENIS19QQ0lfUElEKHBjciwgUElEXzUyNEEpKQ0KPiA+ICsJCXJ0c3hfcGNpX3JlYWRfY29u
ZmlnX2R3b3JkKHBjciwNCj4gPiArCQkJUENSX0FTUE1fU0VUVElOR19SRUcxLCAmbHZhbCk7DQo+
ID4gKwllbHNlDQo+ID4gKwkJcnRzeF9wY2lfcmVhZF9jb25maWdfZHdvcmQocGNyLA0KPiA+ICsJ
CQlQQ1JfQVNQTV9TRVRUSU5HX1JFRzIsICZsdmFsKTsNCj4gDQo+IFRoaXMgbG9va3MgbGlrZSB5
b3UncmUgcmVhZGluZyB0aGUgQVNQTSBMMSBTdWJzdGF0ZXMgY2FwYWJpbGl0eSwgaS5lLiwNCj4g
UENJX0wxU1NfQ0FQLCB1c2luZyBoYXJkLWNvZGVkIG9mZnNldHMgYmFzZWQgb24gdGhlIERldmlj
ZSBJRC4gIFlvdSBzaG91bGQNCj4gYmUgdXNpbmcgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoKSB0
byBsb2NhdGUgaXQuDQo+IA0KPiA+ICsJaWYgKGx2YWwgJiBBU1BNX0wxXzFfRU5fTUFTSykNCj4g
PiArCQlydHN4X3NldF9kZXZfZmxhZyhwY3IsIEFTUE1fTDFfMV9FTik7DQo+ID4gKw0KPiA+ICsJ
aWYgKGx2YWwgJiBBU1BNX0wxXzJfRU5fTUFTSykNCj4gPiArCQlydHN4X3NldF9kZXZfZmxhZyhw
Y3IsIEFTUE1fTDFfMl9FTik7DQo+ID4gKw0KPiA+ICsJaWYgKGx2YWwgJiBQTV9MMV8xX0VOX01B
U0spDQo+ID4gKwkJcnRzeF9zZXRfZGV2X2ZsYWcocGNyLCBQTV9MMV8xX0VOKTsNCj4gPiArDQo+
ID4gKwlpZiAobHZhbCAmIFBNX0wxXzJfRU5fTUFTSykNCj4gPiArCQlydHN4X3NldF9kZXZfZmxh
ZyhwY3IsIFBNX0wxXzJfRU4pOw0KPiANCj4gWW91J3JlIGFkZGluZyB0aGVzZToNCj4gDQo+ICAg
I2RlZmluZSBBU1BNX0wxXzFfRU5fTUFTSyAgICAgICAgICAgICAgQklUKDMpDQo+ICAgI2RlZmlu
ZSBBU1BNX0wxXzJfRU5fTUFTSyAgICAgICAgICAgICAgQklUKDIpDQo+ICAgI2RlZmluZSBQTV9M
MV8xX0VOX01BU0sgICAgICAgICAgICAgICAgQklUKDEpDQo+ICAgI2RlZmluZSBQTV9MMV8yX0VO
X01BU0sgICAgICAgICAgICAgICAgQklUKDApDQo+IA0KPiBUaGUgUENJIGNvcmUgYWxyZWFkeSBk
ZWZpbmVzIHRoZXNlIGFuZCB5b3Ugc2hvdWxkIHVzZSB0aGVtIGluc3RlYWQ6DQo+IA0KPiAgICNk
ZWZpbmUgIFBDSV9MMVNTX0NBUF9QQ0lQTV9MMV8yICAgICAgICAweDAwMDAwMDAxICAvKiBQQ0kt
UE0NCj4gTDEuMiBTdXBwb3J0ZWQgKi8NCj4gICAjZGVmaW5lICBQQ0lfTDFTU19DQVBfUENJUE1f
TDFfMSAgICAgICAgMHgwMDAwMDAwMiAgLyogUENJLVBNDQo+IEwxLjEgU3VwcG9ydGVkICovDQo+
ICAgI2RlZmluZSAgUENJX0wxU1NfQ0FQX0FTUE1fTDFfMiAgICAgICAgIDB4MDAwMDAwMDQgIC8q
IEFTUE0gTDEuMg0KPiBTdXBwb3J0ZWQgKi8NCj4gICAjZGVmaW5lICBQQ0lfTDFTU19DQVBfQVNQ
TV9MMV8xICAgICAgICAgMHgwMDAwMDAwOCAgLyogQVNQTSBMMS4xDQo+IFN1cHBvcnRlZCAqLw0K
PiANCj4gPiArCWlmIChvcHRpb24tPmx0cl9lbikgew0KPiA+ICsJCXUxNiB2YWw7DQo+ID4gKw0K
PiA+ICsJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocGNyLT5wY2ksIFBDSV9FWFBfREVWQ1RM
MiwgJnZhbCk7DQo+ID4gKwkJaWYgKHZhbCAmIFBDSV9FWFBfREVWQ1RMMl9MVFJfRU4pIHsNCj4g
PiArCQkJb3B0aW9uLT5sdHJfZW5hYmxlZCA9IHRydWU7DQo+ID4gKwkJCW9wdGlvbi0+bHRyX2Fj
dGl2ZSA9IHRydWU7DQo+IA0KPiBsdHJfYWN0aXZlIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQuDQo+
IA0KPiA+ICsJCQlydHN4X3NldF9sdHJfbGF0ZW5jeShwY3IsIG9wdGlvbi0+bHRyX2FjdGl2ZV9s
YXRlbmN5KTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlvcHRpb24tPmx0cl9lbmFibGVkID0g
ZmFsc2U7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gLi4uDQo+IA0KPiA+ICtzdGF0
aWMgdm9pZCBydHM1MjQ5X3NldF9hc3BtKHN0cnVjdCBydHN4X3BjciAqcGNyLCBib29sIGVuYWJs
ZSkgew0KPiA+ICsJc3RydWN0IHJ0c3hfY3Jfb3B0aW9uICpvcHRpb24gPSAmcGNyLT5vcHRpb247
DQo+ID4gKwl1OCB2YWwgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChwY3ItPmFzcG1fZW5hYmxlZCA9
PSBlbmFibGUpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWlmIChvcHRpb24tPmRldl9h
c3BtX21vZGUgPT0gREVWX0FTUE1fRFlOQU1JQykgew0KPiA+ICsJCWlmIChlbmFibGUpDQo+ID4g
KwkJCXZhbCA9IHBjci0+YXNwbV9lbjsNCj4gPiArCQlydHN4X3BjaV91cGRhdGVfY2ZnX2J5dGUo
cGNyLA0KPiA+ICsJCQlwY3ItPnBjaWVfY2FwICsgUENJX0VYUF9MTktDVEwsDQo+ID4gKwkJCUFT
UE1fTUFTS19ORUcsIHZhbCk7DQo+IA0KPiBUaGlzIHN0b21wcyBvbiB3aGF0ZXZlciBBU1BNIGNv
bmZpZ3VyYXRpb24gdGhlIFBDSSBjb3JlIGRpZC4NCldlIGRpc2FibGUvZW5hYmxlIGFzcG0gZHlu
YW1pYyBpbiBvcmRlciB0byBpbXByb3ZlIHJlYWQvd3JpdGUgcGVyZm9ybWFuY2UgYW5kIG1vcmUg
c3RhYmxlLA0Kc28gd2UgZG9uJ3QgYWxsb3cgUENJIGNvcmUgZG8gaXQuDQoNCj4gDQo+ID4gKwl9
IGVsc2UgaWYgKG9wdGlvbi0+ZGV2X2FzcG1fbW9kZSA9PSBERVZfQVNQTV9CQUNLRE9PUikgew0K
PiANCj4gREVWX0FTUE1fQkFDS0RPT1IgaXMgbmV2ZXIgc2V0LCBzbyB0aGlzIGxvb2tzIGxpa2Ug
ZGVhZCBjb2RlLg0KPiANCj4gPiArCQl1OCBtYXNrID0gRk9SQ0VfQVNQTV9WQUxfTUFTSyB8IEZP
UkNFX0FTUE1fQ1RMMDsNCj4gPiArCQlpZiAoIWVuYWJsZSkNCj4gPiArCQkJdmFsID0gRk9SQ0Vf
QVNQTV9DVEwwOw0KPiA+ICsJCXJ0c3hfcGNpX3dyaXRlX3JlZ2lzdGVyKHBjciwgQVNQTV9GT1JD
RV9DVEwsIG1hc2ssIHZhbCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGNyLT5hc3BtX2VuYWJs
ZWQgPSBlbmFibGU7DQo+ID4gK30NCj4gDQo+IC0tLS0tLVBsZWFzZSBjb25zaWRlciB0aGUgZW52
aXJvbm1lbnQgYmVmb3JlIHByaW50aW5nIHRoaXMgZS1tYWlsLg0K

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

* Re: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2017-12-15  9:42   ` 答复: " 冯锐
@ 2017-12-15 15:15     ` Bjorn Helgaas
  2017-12-19  8:15       ` 答复: " 冯锐
  0 siblings, 1 reply; 10+ messages in thread
From: Bjorn Helgaas @ 2017-12-15 15:15 UTC (permalink / raw)
  To: 冯锐
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

On Fri, Dec 15, 2017 at 09:42:45AM +0000, 冯锐 wrote:
> > [+cc Hans, Dave, linux-pci]
> > 
> > On Thu, Sep 07, 2017 at 04:26:39PM +0800, rui_feng@realsil.com.cn wrote:
> > > From: Rui Feng <rui_feng@realsil.com.cn>
> > 
> > I wish this had been posted to linux-pci before being merged.
> > 
> > I'm concerned because some of this appears to overlap and conflict with PCI
> > core management of ASPM.
> > 
> > I assume these devices advertise ASPM support in their Link Capabilites
> > registers, right?  If so, why isn't the existing PCI core ASPM support
> > sufficient?
> > 
> When L1SS is configured, the device(hardware) can't enter L1SS status automatically,
> it need driver(software) to do some work to achieve the function.

So this is a hardware defect in the device?  As far as I know, ASPM
and L1SS are specified such that they should work without special
driver support.

> > > Enable power saving for RTS5250S as following steps:
> > > 1.Set 0xFE58 to enable clock power management.
> > 
> > Is this clock power management something specific to RTS5250S, or is it
> > standard PCIe architected stuff?
> > 
> 0xFE58 is specific register to RTS5250S not standard PCIe architected stuff.

OK.  I asked because devices often mirror architected PCIe config
things in device-specific MMIO space, and if I squint just right, I
can sort of match up the register bits you used with things in the
PCIe spec.

> > > 2.Check cfg space whether support L1SS or not.
> > 
> > This sounds like standard PCIe ASPM L1 Substates, right?
> > 
> Yes.
> 
> > > 3.If support L1SS, set 0xFF03 to free clkreq.
> > > 4.When entering idle status, enable aspm
> > >   and set parameters for L1SS and LTR.
> > > 5.Wnen entering run status, disable aspm
> > >   and set parameters for L1SS and LTR.
> > 
> > In general, drivers should not configure ASPM, L1SS, and LTR themselves; the
> > PCI core should do that.
> > 
> > If a driver needs to tweak ASPM at run-time, it should use interfaces exported
> > by the PCI core to do so.
> > 
> Which interface I can use to set ASPM? I use "pci_write_config_byte" now.

What do you need to do?  include/linux/pci-aspm.h exports
pci_disable_link_state(), which is mainly used to avoid ASPM states
that have hardware errata.

If you need to do something beyond that, we can talk about adding
something new.

There are quite a few other things in include/linux/pci-aspm.h, but
they're all for internal use in the PCI core.  I'll move them to
drivers/pci/pci.h to avoid confusion.

> > > +static void rts5249_set_aspm(struct rtsx_pcr *pcr, bool enable) {
> > > +	struct rtsx_cr_option *option = &pcr->option;
> > > +	u8 val = 0;
> > > +
> > > +	if (pcr->aspm_enabled == enable)
> > > +		return;
> > > +
> > > +	if (option->dev_aspm_mode == DEV_ASPM_DYNAMIC) {
> > > +		if (enable)
> > > +			val = pcr->aspm_en;
> > > +		rtsx_pci_update_cfg_byte(pcr,
> > > +			pcr->pcie_cap + PCI_EXP_LNKCTL,
> > > +			ASPM_MASK_NEG, val);
> > 
> > This stomps on whatever ASPM configuration the PCI core did.
> We disable/enable aspm dynamic in order to improve read/write performance and more stable,
> so we don't allow PCI core do it.

This is pretty vague.  Can you be any more specific?  If there are
performance or stability problems in the PCI core ASPM support, I'd
prefer to fix those instead of working around them in every driver.

Bjorn

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

* 答复: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2017-12-15 15:15     ` Bjorn Helgaas
@ 2017-12-19  8:15       ` 冯锐
  2017-12-27 23:37         ` Bjorn Helgaas
  0 siblings, 1 reply; 10+ messages in thread
From: 冯锐 @ 2017-12-19  8:15 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

PiBPbiBGcmksIERlYyAxNSwgMjAxNyBhdCAwOTo0Mjo0NUFNICswMDAwLCDlhq/plJAgd3JvdGU6
DQo+ID4gPiBbK2NjIEhhbnMsIERhdmUsIGxpbnV4LXBjaV0NCj4gPiA+DQo+ID4gPiBPbiBUaHUs
IFNlcCAwNywgMjAxNyBhdCAwNDoyNjozOVBNICswODAwLCBydWlfZmVuZ0ByZWFsc2lsLmNvbS5j
bg0KPiB3cm90ZToNCj4gPiA+ID4gRnJvbTogUnVpIEZlbmcgPHJ1aV9mZW5nQHJlYWxzaWwuY29t
LmNuPg0KPiA+ID4NCj4gPiA+IEkgd2lzaCB0aGlzIGhhZCBiZWVuIHBvc3RlZCB0byBsaW51eC1w
Y2kgYmVmb3JlIGJlaW5nIG1lcmdlZC4NCj4gPiA+DQo+ID4gPiBJJ20gY29uY2VybmVkIGJlY2F1
c2Ugc29tZSBvZiB0aGlzIGFwcGVhcnMgdG8gb3ZlcmxhcCBhbmQgY29uZmxpY3QNCj4gPiA+IHdp
dGggUENJIGNvcmUgbWFuYWdlbWVudCBvZiBBU1BNLg0KPiA+ID4NCj4gPiA+IEkgYXNzdW1lIHRo
ZXNlIGRldmljZXMgYWR2ZXJ0aXNlIEFTUE0gc3VwcG9ydCBpbiB0aGVpciBMaW5rDQo+ID4gPiBD
YXBhYmlsaXRlcyByZWdpc3RlcnMsIHJpZ2h0PyAgSWYgc28sIHdoeSBpc24ndCB0aGUgZXhpc3Rp
bmcgUENJDQo+ID4gPiBjb3JlIEFTUE0gc3VwcG9ydCBzdWZmaWNpZW50Pw0KPiA+ID4NCj4gPiBX
aGVuIEwxU1MgaXMgY29uZmlndXJlZCwgdGhlIGRldmljZShoYXJkd2FyZSkgY2FuJ3QgZW50ZXIg
TDFTUyBzdGF0dXMNCj4gPiBhdXRvbWF0aWNhbGx5LCBpdCBuZWVkIGRyaXZlcihzb2Z0d2FyZSkg
dG8gZG8gc29tZSB3b3JrIHRvIGFjaGlldmUgdGhlDQo+IGZ1bmN0aW9uLg0KPiANCj4gU28gdGhp
cyBpcyBhIGhhcmR3YXJlIGRlZmVjdCBpbiB0aGUgZGV2aWNlPyAgQXMgZmFyIGFzIEkga25vdywg
QVNQTSBhbmQgTDFTUw0KPiBhcmUgc3BlY2lmaWVkIHN1Y2ggdGhhdCB0aGV5IHNob3VsZCB3b3Jr
IHdpdGhvdXQgc3BlY2lhbCBkcml2ZXIgc3VwcG9ydC4NCj4gDQpZZXMsIHlvdSBjYW4gc2F5IHRo
YXQuDQoNCj4gPiA+ID4gRW5hYmxlIHBvd2VyIHNhdmluZyBmb3IgUlRTNTI1MFMgYXMgZm9sbG93
aW5nIHN0ZXBzOg0KPiA+ID4gPiAxLlNldCAweEZFNTggdG8gZW5hYmxlIGNsb2NrIHBvd2VyIG1h
bmFnZW1lbnQuDQo+ID4gPg0KPiA+ID4gSXMgdGhpcyBjbG9jayBwb3dlciBtYW5hZ2VtZW50IHNv
bWV0aGluZyBzcGVjaWZpYyB0byBSVFM1MjUwUywgb3IgaXMNCj4gPiA+IGl0IHN0YW5kYXJkIFBD
SWUgYXJjaGl0ZWN0ZWQgc3R1ZmY/DQo+ID4gPg0KPiA+IDB4RkU1OCBpcyBzcGVjaWZpYyByZWdp
c3RlciB0byBSVFM1MjUwUyBub3Qgc3RhbmRhcmQgUENJZSBhcmNoaXRlY3RlZCBzdHVmZi4NCj4g
DQo+IE9LLiAgSSBhc2tlZCBiZWNhdXNlIGRldmljZXMgb2Z0ZW4gbWlycm9yIGFyY2hpdGVjdGVk
IFBDSWUgY29uZmlnIHRoaW5ncyBpbg0KPiBkZXZpY2Utc3BlY2lmaWMgTU1JTyBzcGFjZSwgYW5k
IGlmIEkgc3F1aW50IGp1c3QgcmlnaHQsIEkgY2FuIHNvcnQgb2YgbWF0Y2ggdXAgdGhlDQo+IHJl
Z2lzdGVyIGJpdHMgeW91IHVzZWQgd2l0aCB0aGluZ3MgaW4gdGhlIFBDSWUgc3BlYy4NCj4gDQo+
ID4gPiA+IDIuQ2hlY2sgY2ZnIHNwYWNlIHdoZXRoZXIgc3VwcG9ydCBMMVNTIG9yIG5vdC4NCj4g
PiA+DQo+ID4gPiBUaGlzIHNvdW5kcyBsaWtlIHN0YW5kYXJkIFBDSWUgQVNQTSBMMSBTdWJzdGF0
ZXMsIHJpZ2h0Pw0KPiA+ID4NCj4gPiBZZXMuDQo+ID4NCj4gPiA+ID4gMy5JZiBzdXBwb3J0IEwx
U1MsIHNldCAweEZGMDMgdG8gZnJlZSBjbGtyZXEuDQo+ID4gPiA+IDQuV2hlbiBlbnRlcmluZyBp
ZGxlIHN0YXR1cywgZW5hYmxlIGFzcG0NCj4gPiA+ID4gICBhbmQgc2V0IHBhcmFtZXRlcnMgZm9y
IEwxU1MgYW5kIExUUi4NCj4gPiA+ID4gNS5XbmVuIGVudGVyaW5nIHJ1biBzdGF0dXMsIGRpc2Fi
bGUgYXNwbQ0KPiA+ID4gPiAgIGFuZCBzZXQgcGFyYW1ldGVycyBmb3IgTDFTUyBhbmQgTFRSLg0K
PiA+ID4NCj4gPiA+IEluIGdlbmVyYWwsIGRyaXZlcnMgc2hvdWxkIG5vdCBjb25maWd1cmUgQVNQ
TSwgTDFTUywgYW5kIExUUg0KPiA+ID4gdGhlbXNlbHZlczsgdGhlIFBDSSBjb3JlIHNob3VsZCBk
byB0aGF0Lg0KPiA+ID4NCj4gPiA+IElmIGEgZHJpdmVyIG5lZWRzIHRvIHR3ZWFrIEFTUE0gYXQg
cnVuLXRpbWUsIGl0IHNob3VsZCB1c2UNCj4gPiA+IGludGVyZmFjZXMgZXhwb3J0ZWQgYnkgdGhl
IFBDSSBjb3JlIHRvIGRvIHNvLg0KPiA+ID4NCj4gPiBXaGljaCBpbnRlcmZhY2UgSSBjYW4gdXNl
IHRvIHNldCBBU1BNPyBJIHVzZSAicGNpX3dyaXRlX2NvbmZpZ19ieXRlIiBub3cuDQo+IA0KPiBX
aGF0IGRvIHlvdSBuZWVkIHRvIGRvPyAgaW5jbHVkZS9saW51eC9wY2ktYXNwbS5oIGV4cG9ydHMN
Cj4gcGNpX2Rpc2FibGVfbGlua19zdGF0ZSgpLCB3aGljaCBpcyBtYWlubHkgdXNlZCB0byBhdm9p
ZCBBU1BNIHN0YXRlcyB0aGF0IGhhdmUNCj4gaGFyZHdhcmUgZXJyYXRhLg0KPiANCkkgd2FudCB0
byBlbmFibGUgQVNQTShMMCAtPiBMMSkgYW5kIGRpc2FibGUgQVNQTShMMSAtPiBMMCksIHdoaWNo
IGludGVyZmFjZSBjYW4gSSB1c2U/DQoNCj4gSWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIGJl
eW9uZCB0aGF0LCB3ZSBjYW4gdGFsayBhYm91dCBhZGRpbmcgc29tZXRoaW5nDQo+IG5ldy4NCj4g
DQo+IFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBvdGhlciB0aGluZ3MgaW4gaW5jbHVkZS9saW51eC9w
Y2ktYXNwbS5oLCBidXQgdGhleSdyZSBhbGwNCj4gZm9yIGludGVybmFsIHVzZSBpbiB0aGUgUENJ
IGNvcmUuICBJJ2xsIG1vdmUgdGhlbSB0byBkcml2ZXJzL3BjaS9wY2kuaCB0byBhdm9pZA0KPiBj
b25mdXNpb24uDQo+IA0KPiA+ID4gPiArc3RhdGljIHZvaWQgcnRzNTI0OV9zZXRfYXNwbShzdHJ1
Y3QgcnRzeF9wY3IgKnBjciwgYm9vbCBlbmFibGUpIHsNCj4gPiA+ID4gKwlzdHJ1Y3QgcnRzeF9j
cl9vcHRpb24gKm9wdGlvbiA9ICZwY3ItPm9wdGlvbjsNCj4gPiA+ID4gKwl1OCB2YWwgPSAwOw0K
PiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKHBjci0+YXNwbV9lbmFibGVkID09IGVuYWJsZSkNCj4g
PiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKG9wdGlvbi0+ZGV2X2Fz
cG1fbW9kZSA9PSBERVZfQVNQTV9EWU5BTUlDKSB7DQo+ID4gPiA+ICsJCWlmIChlbmFibGUpDQo+
ID4gPiA+ICsJCQl2YWwgPSBwY3ItPmFzcG1fZW47DQo+ID4gPiA+ICsJCXJ0c3hfcGNpX3VwZGF0
ZV9jZmdfYnl0ZShwY3IsDQo+ID4gPiA+ICsJCQlwY3ItPnBjaWVfY2FwICsgUENJX0VYUF9MTktD
VEwsDQo+ID4gPiA+ICsJCQlBU1BNX01BU0tfTkVHLCB2YWwpOw0KPiA+ID4NCj4gPiA+IFRoaXMg
c3RvbXBzIG9uIHdoYXRldmVyIEFTUE0gY29uZmlndXJhdGlvbiB0aGUgUENJIGNvcmUgZGlkLg0K
PiA+IFdlIGRpc2FibGUvZW5hYmxlIGFzcG0gZHluYW1pYyBpbiBvcmRlciB0byBpbXByb3ZlIHJl
YWQvd3JpdGUNCj4gPiBwZXJmb3JtYW5jZSBhbmQgbW9yZSBzdGFibGUsIHNvIHdlIGRvbid0IGFs
bG93IFBDSSBjb3JlIGRvIGl0Lg0KPiANCj4gVGhpcyBpcyBwcmV0dHkgdmFndWUuICBDYW4geW91
IGJlIGFueSBtb3JlIHNwZWNpZmljPyAgSWYgdGhlcmUgYXJlDQo+IHBlcmZvcm1hbmNlIG9yIHN0
YWJpbGl0eSBwcm9ibGVtcyBpbiB0aGUgUENJIGNvcmUgQVNQTSBzdXBwb3J0LCBJJ2QgcHJlZmVy
IHRvDQo+IGZpeCB0aG9zZSBpbnN0ZWFkIG9mIHdvcmtpbmcgYXJvdW5kIHRoZW0gaW4gZXZlcnkg
ZHJpdmVyLg0KPiANCkl0J3MgZGV2aWNlJ3MgZGVmZWN0IG5vdCBQQ0kgY29yZSwgc28gbm8gbmVl
ZCB0byBmaXggUENJIGNvcmUuDQoNCj4gQmpvcm4NCj4gDQo+IC0tLS0tLVBsZWFzZSBjb25zaWRl
ciB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHByaW50aW5nIHRoaXMgZS1tYWlsLg0K

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

* Re: 答复: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2017-12-19  8:15       ` 答复: " 冯锐
@ 2017-12-27 23:37         ` Bjorn Helgaas
  2018-01-17 21:01           ` Bjorn Helgaas
  0 siblings, 1 reply; 10+ messages in thread
From: Bjorn Helgaas @ 2017-12-27 23:37 UTC (permalink / raw)
  To: 冯锐
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

On Tue, Dec 19, 2017 at 08:15:24AM +0000, 冯锐 wrote:
> > On Fri, Dec 15, 2017 at 09:42:45AM +0000, 冯锐 wrote:
> > > > [+cc Hans, Dave, linux-pci]
> > > >
> > > > On Thu, Sep 07, 2017 at 04:26:39PM +0800, rui_feng@realsil.com.cn
> > wrote:
> > > > > From: Rui Feng <rui_feng@realsil.com.cn>
> > > >
> > > > I wish this had been posted to linux-pci before being merged.
> > > >
> > > > I'm concerned because some of this appears to overlap and conflict
> > > > with PCI core management of ASPM.
> > > >
> > > > I assume these devices advertise ASPM support in their Link
> > > > Capabilites registers, right?  If so, why isn't the existing PCI
> > > > core ASPM support sufficient?
> > > >
> > > When L1SS is configured, the device(hardware) can't enter L1SS status
> > > automatically, it need driver(software) to do some work to achieve the
> > function.
> > 
> > So this is a hardware defect in the device?  As far as I know, ASPM and L1SS
> > are specified such that they should work without special driver support.
> > 
> Yes, you can say that.
> 
> > > > > Enable power saving for RTS5250S as following steps:
> > > > > 1.Set 0xFE58 to enable clock power management.
> > > >
> > > > Is this clock power management something specific to RTS5250S, or is
> > > > it standard PCIe architected stuff?
> > > >
> > > 0xFE58 is specific register to RTS5250S not standard PCIe architected stuff.
> > 
> > OK.  I asked because devices often mirror architected PCIe config things in
> > device-specific MMIO space, and if I squint just right, I can sort of match up the
> > register bits you used with things in the PCIe spec.
> > 
> > > > > 2.Check cfg space whether support L1SS or not.
> > > >
> > > > This sounds like standard PCIe ASPM L1 Substates, right?
> > > >
> > > Yes.
> > >
> > > > > 3.If support L1SS, set 0xFF03 to free clkreq.
> > > > > 4.When entering idle status, enable aspm
> > > > >   and set parameters for L1SS and LTR.
> > > > > 5.Wnen entering run status, disable aspm
> > > > >   and set parameters for L1SS and LTR.
> > > >
> > > > In general, drivers should not configure ASPM, L1SS, and LTR
> > > > themselves; the PCI core should do that.
> > > >
> > > > If a driver needs to tweak ASPM at run-time, it should use
> > > > interfaces exported by the PCI core to do so.
> > > >
> > > Which interface I can use to set ASPM? I use "pci_write_config_byte" now.
> > 
> > What do you need to do?  include/linux/pci-aspm.h exports
> > pci_disable_link_state(), which is mainly used to avoid ASPM
> > states that have hardware errata.
> > 
> I want to enable ASPM(L0 -> L1) and disable ASPM(L1 -> L0), which
> interface can I use?

You can use pci_disable_link_state() to disable usage of L1.

Currently there is no corresponding pci_enable_link_state().  What if
we added something like the following (untested)?  Would that work for
you?


commit 209930d809fa602b8aafdd171b26719cee6c6649
Author: Bjorn Helgaas <bhelgaas@google.com>
Date:   Wed Dec 27 16:56:26 2017 -0600

    PCI/ASPM: Add pci_enable_link_state()
    
    Some drivers want control over the ASPM states their device is allowed to
    use.  We already have a pci_disable_link_state(), and drivers can use that
    to prevent the device from entering L0 or L1s.
    
    Add a corresponding pci_enable_link_state() so a driver can enable use of
    L0 or L1s again.

diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 3b9b4d50cd98..ca217195f800 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -1028,6 +1028,67 @@ void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
 	up_read(&pci_bus_sem);
 }
 
+/**
+ * pci_enable_link_state - Enable device's link state, so the link may
+ * enter specific states.  Note that if the BIOS didn't grant ASPM
+ * control to the OS, this does nothing because we can't touch the LNKCTL
+ * register.
+ *
+ * @pdev: PCI device
+ * @state: ASPM link state to enable
+ */
+void pci_enable_link_state(struct pci_dev *pdev, int state)
+{
+	struct pci_dev *parent = pdev->bus->self;
+	struct pcie_link_state *link;
+	u32 lnkcap;
+
+	if (!pci_is_pcie(pdev))
+		return;
+
+	if (pdev->has_secondary_link)
+		parent = pdev;
+	if (!parent || !parent->link_state)
+		return;
+
+	/*
+	 * A driver requested that ASPM be enabled on this device, but
+	 * if we don't have permission to manage ASPM (e.g., on ACPI
+	 * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
+	 * the _OSC method), we can't honor that request.  Windows has
+	 * a similar mechanism using "PciASPMOptOut", which is also
+	 * ignored in this situation.
+	 */
+	if (aspm_disabled) {
+		dev_warn(&pdev->dev, "can't enable ASPM; OS doesn't have ASPM control\n");
+		return;
+	}
+
+	down_read(&pci_bus_sem);
+	mutex_lock(&aspm_lock);
+	link = parent->link_state;
+	if (state & PCIE_LINK_STATE_L0S)
+		link->aspm_disable &= ~ASPM_STATE_L0S;
+	if (state & PCIE_LINK_STATE_L1)
+		link->aspm_disable &= ~ASPM_STATE_L1;
+	pcie_config_aspm_link(link, policy_to_aspm_state(link));
+
+	/*
+	 * Enable Clock Power Management if requested by the driver,
+	 * supported by the device, and allowed by the current policy.
+	 */
+	if (state & PCIE_LINK_STATE_CLKPM) {
+		pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &lnkcap);
+		if (lnkcap & PCI_EXP_LNKCAP_CLKPM) {
+			link->clkpm_capable = 1;
+			pcie_set_clkpm(link, policy_to_clkpm_state(link));
+		}
+	}
+	mutex_unlock(&aspm_lock);
+	up_read(&pci_bus_sem);
+}
+EXPORT_SYMBOL(pci_enable_link_state);
+
 static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem)
 {
 	struct pci_dev *parent = pdev->bus->self;
diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h
index df28af5cef21..cd0736b384ae 100644
--- a/include/linux/pci-aspm.h
+++ b/include/linux/pci-aspm.h
@@ -24,10 +24,12 @@
 #define PCIE_LINK_STATE_CLKPM	4
 
 #ifdef CONFIG_PCIEASPM
+void pci_enable_link_state(struct pci_dev *pdev, int state);
 void pci_disable_link_state(struct pci_dev *pdev, int state);
 void pci_disable_link_state_locked(struct pci_dev *pdev, int state);
 void pcie_no_aspm(void);
 #else
+static inline void pci_enable_link_state(struct pci_dev *pdev, int state) { }
 static inline void pci_disable_link_state(struct pci_dev *pdev, int state) { }
 static inline void pcie_no_aspm(void) { }
 #endif

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

* Re: 答复: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2017-12-27 23:37         ` Bjorn Helgaas
@ 2018-01-17 21:01           ` Bjorn Helgaas
  2018-01-19  7:38             ` 答复: " 冯锐
  0 siblings, 1 reply; 10+ messages in thread
From: Bjorn Helgaas @ 2018-01-17 21:01 UTC (permalink / raw)
  To: 冯锐
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

On Wed, Dec 27, 2017 at 05:37:50PM -0600, Bjorn Helgaas wrote:
> On Tue, Dec 19, 2017 at 08:15:24AM +0000, 冯锐 wrote:
> > > On Fri, Dec 15, 2017 at 09:42:45AM +0000, 冯锐 wrote:
> > > > > [+cc Hans, Dave, linux-pci]
> > > > >
> > > > > On Thu, Sep 07, 2017 at 04:26:39PM +0800, rui_feng@realsil.com.cn
> > > wrote:
> > > > > > From: Rui Feng <rui_feng@realsil.com.cn>
> > > > >
> > > > > I wish this had been posted to linux-pci before being merged.
> > > > >
> > > > > I'm concerned because some of this appears to overlap and conflict
> > > > > with PCI core management of ASPM.
> > > > >
> > > > > I assume these devices advertise ASPM support in their Link
> > > > > Capabilites registers, right?  If so, why isn't the existing PCI
> > > > > core ASPM support sufficient?
> > > > >
> > > > When L1SS is configured, the device(hardware) can't enter L1SS status
> > > > automatically, it need driver(software) to do some work to achieve the
> > > function.
> > > 
> > > So this is a hardware defect in the device?  As far as I know, ASPM and L1SS
> > > are specified such that they should work without special driver support.
> > > 
> > Yes, you can say that.
> > 
> > > > > > Enable power saving for RTS5250S as following steps:
> > > > > > 1.Set 0xFE58 to enable clock power management.
> > > > >
> > > > > Is this clock power management something specific to RTS5250S, or is
> > > > > it standard PCIe architected stuff?
> > > > >
> > > > 0xFE58 is specific register to RTS5250S not standard PCIe architected stuff.
> > > 
> > > OK.  I asked because devices often mirror architected PCIe config things in
> > > device-specific MMIO space, and if I squint just right, I can sort of match up the
> > > register bits you used with things in the PCIe spec.
> > > 
> > > > > > 2.Check cfg space whether support L1SS or not.
> > > > >
> > > > > This sounds like standard PCIe ASPM L1 Substates, right?
> > > > >
> > > > Yes.
> > > >
> > > > > > 3.If support L1SS, set 0xFF03 to free clkreq.
> > > > > > 4.When entering idle status, enable aspm
> > > > > >   and set parameters for L1SS and LTR.
> > > > > > 5.Wnen entering run status, disable aspm
> > > > > >   and set parameters for L1SS and LTR.
> > > > >
> > > > > In general, drivers should not configure ASPM, L1SS, and LTR
> > > > > themselves; the PCI core should do that.
> > > > >
> > > > > If a driver needs to tweak ASPM at run-time, it should use
> > > > > interfaces exported by the PCI core to do so.
> > > > >
> > > > Which interface I can use to set ASPM? I use "pci_write_config_byte" now.
> > > 
> > > What do you need to do?  include/linux/pci-aspm.h exports
> > > pci_disable_link_state(), which is mainly used to avoid ASPM
> > > states that have hardware errata.
> > > 
> > I want to enable ASPM(L0 -> L1) and disable ASPM(L1 -> L0), which
> > interface can I use?
> 
> You can use pci_disable_link_state() to disable usage of L1.
> 
> Currently there is no corresponding pci_enable_link_state().  What if
> we added something like the following (untested)?  Would that work for
> you?

Hi Rui,

Any thoughts on the patch below?

> commit 209930d809fa602b8aafdd171b26719cee6c6649
> Author: Bjorn Helgaas <bhelgaas@google.com>
> Date:   Wed Dec 27 16:56:26 2017 -0600
> 
>     PCI/ASPM: Add pci_enable_link_state()
>     
>     Some drivers want control over the ASPM states their device is allowed to
>     use.  We already have a pci_disable_link_state(), and drivers can use that
>     to prevent the device from entering L0 or L1s.
>     
>     Add a corresponding pci_enable_link_state() so a driver can enable use of
>     L0 or L1s again.
> 
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 3b9b4d50cd98..ca217195f800 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1028,6 +1028,67 @@ void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
>  	up_read(&pci_bus_sem);
>  }
>  
> +/**
> + * pci_enable_link_state - Enable device's link state, so the link may
> + * enter specific states.  Note that if the BIOS didn't grant ASPM
> + * control to the OS, this does nothing because we can't touch the LNKCTL
> + * register.
> + *
> + * @pdev: PCI device
> + * @state: ASPM link state to enable
> + */
> +void pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> +	struct pci_dev *parent = pdev->bus->self;
> +	struct pcie_link_state *link;
> +	u32 lnkcap;
> +
> +	if (!pci_is_pcie(pdev))
> +		return;
> +
> +	if (pdev->has_secondary_link)
> +		parent = pdev;
> +	if (!parent || !parent->link_state)
> +		return;
> +
> +	/*
> +	 * A driver requested that ASPM be enabled on this device, but
> +	 * if we don't have permission to manage ASPM (e.g., on ACPI
> +	 * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> +	 * the _OSC method), we can't honor that request.  Windows has
> +	 * a similar mechanism using "PciASPMOptOut", which is also
> +	 * ignored in this situation.
> +	 */
> +	if (aspm_disabled) {
> +		dev_warn(&pdev->dev, "can't enable ASPM; OS doesn't have ASPM control\n");
> +		return;
> +	}
> +
> +	down_read(&pci_bus_sem);
> +	mutex_lock(&aspm_lock);
> +	link = parent->link_state;
> +	if (state & PCIE_LINK_STATE_L0S)
> +		link->aspm_disable &= ~ASPM_STATE_L0S;
> +	if (state & PCIE_LINK_STATE_L1)
> +		link->aspm_disable &= ~ASPM_STATE_L1;
> +	pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> +	/*
> +	 * Enable Clock Power Management if requested by the driver,
> +	 * supported by the device, and allowed by the current policy.
> +	 */
> +	if (state & PCIE_LINK_STATE_CLKPM) {
> +		pcie_capability_read_dword(pdev, PCI_EXP_LNKCAP, &lnkcap);
> +		if (lnkcap & PCI_EXP_LNKCAP_CLKPM) {
> +			link->clkpm_capable = 1;
> +			pcie_set_clkpm(link, policy_to_clkpm_state(link));
> +		}
> +	}
> +	mutex_unlock(&aspm_lock);
> +	up_read(&pci_bus_sem);
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
>  static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem)
>  {
>  	struct pci_dev *parent = pdev->bus->self;
> diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h
> index df28af5cef21..cd0736b384ae 100644
> --- a/include/linux/pci-aspm.h
> +++ b/include/linux/pci-aspm.h
> @@ -24,10 +24,12 @@
>  #define PCIE_LINK_STATE_CLKPM	4
>  
>  #ifdef CONFIG_PCIEASPM
> +void pci_enable_link_state(struct pci_dev *pdev, int state);
>  void pci_disable_link_state(struct pci_dev *pdev, int state);
>  void pci_disable_link_state_locked(struct pci_dev *pdev, int state);
>  void pcie_no_aspm(void);
>  #else
> +static inline void pci_enable_link_state(struct pci_dev *pdev, int state) { }
>  static inline void pci_disable_link_state(struct pci_dev *pdev, int state) { }
>  static inline void pcie_no_aspm(void) { }
>  #endif

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

* 答复: 答复: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2018-01-17 21:01           ` Bjorn Helgaas
@ 2018-01-19  7:38             ` 冯锐
  2018-01-30 19:18               ` Bjorn Helgaas
  0 siblings, 1 reply; 10+ messages in thread
From: 冯锐 @ 2018-01-19  7:38 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

PiBPbiBXZWQsIERlYyAyNywgMjAxNyBhdCAwNTozNzo1MFBNIC0wNjAwLCBCam9ybiBIZWxnYWFz
IHdyb3RlOg0KPiA+IE9uIFR1ZSwgRGVjIDE5LCAyMDE3IGF0IDA4OjE1OjI0QU0gKzAwMDAsIOWG
r+mUkCB3cm90ZToNCj4gPiA+ID4gT24gRnJpLCBEZWMgMTUsIDIwMTcgYXQgMDk6NDI6NDVBTSAr
MDAwMCwg5Yav6ZSQIHdyb3RlOg0KPiA+ID4gPiA+ID4gWytjYyBIYW5zLCBEYXZlLCBsaW51eC1w
Y2ldDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gT24gVGh1LCBTZXAgMDcsIDIwMTcgYXQgMDQ6
MjY6MzlQTSArMDgwMCwNCj4gPiA+ID4gPiA+IHJ1aV9mZW5nQHJlYWxzaWwuY29tLmNuDQo+ID4g
PiA+IHdyb3RlOg0KPiA+ID4gPiA+ID4gPiBGcm9tOiBSdWkgRmVuZyA8cnVpX2ZlbmdAcmVhbHNp
bC5jb20uY24+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSSB3aXNoIHRoaXMgaGFkIGJlZW4g
cG9zdGVkIHRvIGxpbnV4LXBjaSBiZWZvcmUgYmVpbmcgbWVyZ2VkLg0KPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+IEknbSBjb25jZXJuZWQgYmVjYXVzZSBzb21lIG9mIHRoaXMgYXBwZWFycyB0byBv
dmVybGFwIGFuZA0KPiA+ID4gPiA+ID4gY29uZmxpY3Qgd2l0aCBQQ0kgY29yZSBtYW5hZ2VtZW50
IG9mIEFTUE0uDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSSBhc3N1bWUgdGhlc2UgZGV2aWNl
cyBhZHZlcnRpc2UgQVNQTSBzdXBwb3J0IGluIHRoZWlyIExpbmsNCj4gPiA+ID4gPiA+IENhcGFi
aWxpdGVzIHJlZ2lzdGVycywgcmlnaHQ/ICBJZiBzbywgd2h5IGlzbid0IHRoZSBleGlzdGluZw0K
PiA+ID4gPiA+ID4gUENJIGNvcmUgQVNQTSBzdXBwb3J0IHN1ZmZpY2llbnQ/DQo+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+IFdoZW4gTDFTUyBpcyBjb25maWd1cmVkLCB0aGUgZGV2aWNlKGhhcmR3YXJl
KSBjYW4ndCBlbnRlciBMMVNTDQo+ID4gPiA+ID4gc3RhdHVzIGF1dG9tYXRpY2FsbHksIGl0IG5l
ZWQgZHJpdmVyKHNvZnR3YXJlKSB0byBkbyBzb21lIHdvcmsNCj4gPiA+ID4gPiB0byBhY2hpZXZl
IHRoZQ0KPiA+ID4gPiBmdW5jdGlvbi4NCj4gPiA+ID4NCj4gPiA+ID4gU28gdGhpcyBpcyBhIGhh
cmR3YXJlIGRlZmVjdCBpbiB0aGUgZGV2aWNlPyAgQXMgZmFyIGFzIEkga25vdywNCj4gPiA+ID4g
QVNQTSBhbmQgTDFTUyBhcmUgc3BlY2lmaWVkIHN1Y2ggdGhhdCB0aGV5IHNob3VsZCB3b3JrIHdp
dGhvdXQgc3BlY2lhbA0KPiBkcml2ZXIgc3VwcG9ydC4NCj4gPiA+ID4NCj4gPiA+IFllcywgeW91
IGNhbiBzYXkgdGhhdC4NCj4gPiA+DQo+ID4gPiA+ID4gPiA+IEVuYWJsZSBwb3dlciBzYXZpbmcg
Zm9yIFJUUzUyNTBTIGFzIGZvbGxvd2luZyBzdGVwczoNCj4gPiA+ID4gPiA+ID4gMS5TZXQgMHhG
RTU4IHRvIGVuYWJsZSBjbG9jayBwb3dlciBtYW5hZ2VtZW50Lg0KPiA+ID4gPiA+ID4NCj4gPiA+
ID4gPiA+IElzIHRoaXMgY2xvY2sgcG93ZXIgbWFuYWdlbWVudCBzb21ldGhpbmcgc3BlY2lmaWMg
dG8gUlRTNTI1MFMsDQo+ID4gPiA+ID4gPiBvciBpcyBpdCBzdGFuZGFyZCBQQ0llIGFyY2hpdGVj
dGVkIHN0dWZmPw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiAweEZFNTggaXMgc3BlY2lmaWMgcmVn
aXN0ZXIgdG8gUlRTNTI1MFMgbm90IHN0YW5kYXJkIFBDSWUgYXJjaGl0ZWN0ZWQNCj4gc3R1ZmYu
DQo+ID4gPiA+DQo+ID4gPiA+IE9LLiAgSSBhc2tlZCBiZWNhdXNlIGRldmljZXMgb2Z0ZW4gbWly
cm9yIGFyY2hpdGVjdGVkIFBDSWUgY29uZmlnDQo+ID4gPiA+IHRoaW5ncyBpbiBkZXZpY2Utc3Bl
Y2lmaWMgTU1JTyBzcGFjZSwgYW5kIGlmIEkgc3F1aW50IGp1c3QgcmlnaHQsDQo+ID4gPiA+IEkg
Y2FuIHNvcnQgb2YgbWF0Y2ggdXAgdGhlIHJlZ2lzdGVyIGJpdHMgeW91IHVzZWQgd2l0aCB0aGlu
Z3MgaW4gdGhlIFBDSWUNCj4gc3BlYy4NCj4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gMi5DaGVjayBj
Zmcgc3BhY2Ugd2hldGhlciBzdXBwb3J0IEwxU1Mgb3Igbm90Lg0KPiA+ID4gPiA+ID4NCj4gPiA+
ID4gPiA+IFRoaXMgc291bmRzIGxpa2Ugc3RhbmRhcmQgUENJZSBBU1BNIEwxIFN1YnN0YXRlcywg
cmlnaHQ/DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+IFllcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiAzLklmIHN1cHBvcnQgTDFTUywgc2V0IDB4RkYwMyB0byBmcmVlIGNsa3JlcS4NCj4gPiA+
ID4gPiA+ID4gNC5XaGVuIGVudGVyaW5nIGlkbGUgc3RhdHVzLCBlbmFibGUgYXNwbQ0KPiA+ID4g
PiA+ID4gPiAgIGFuZCBzZXQgcGFyYW1ldGVycyBmb3IgTDFTUyBhbmQgTFRSLg0KPiA+ID4gPiA+
ID4gPiA1LlduZW4gZW50ZXJpbmcgcnVuIHN0YXR1cywgZGlzYWJsZSBhc3BtDQo+ID4gPiA+ID4g
PiA+ICAgYW5kIHNldCBwYXJhbWV0ZXJzIGZvciBMMVNTIGFuZCBMVFIuDQo+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+ID4gSW4gZ2VuZXJhbCwgZHJpdmVycyBzaG91bGQgbm90IGNvbmZpZ3VyZSBBU1BN
LCBMMVNTLCBhbmQgTFRSDQo+ID4gPiA+ID4gPiB0aGVtc2VsdmVzOyB0aGUgUENJIGNvcmUgc2hv
dWxkIGRvIHRoYXQuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gSWYgYSBkcml2ZXIgbmVlZHMg
dG8gdHdlYWsgQVNQTSBhdCBydW4tdGltZSwgaXQgc2hvdWxkIHVzZQ0KPiA+ID4gPiA+ID4gaW50
ZXJmYWNlcyBleHBvcnRlZCBieSB0aGUgUENJIGNvcmUgdG8gZG8gc28uDQo+ID4gPiA+ID4gPg0K
PiA+ID4gPiA+IFdoaWNoIGludGVyZmFjZSBJIGNhbiB1c2UgdG8gc2V0IEFTUE0/IEkgdXNlICJw
Y2lfd3JpdGVfY29uZmlnX2J5dGUiDQo+IG5vdy4NCj4gPiA+ID4NCj4gPiA+ID4gV2hhdCBkbyB5
b3UgbmVlZCB0byBkbz8gIGluY2x1ZGUvbGludXgvcGNpLWFzcG0uaCBleHBvcnRzDQo+ID4gPiA+
IHBjaV9kaXNhYmxlX2xpbmtfc3RhdGUoKSwgd2hpY2ggaXMgbWFpbmx5IHVzZWQgdG8gYXZvaWQg
QVNQTQ0KPiA+ID4gPiBzdGF0ZXMgdGhhdCBoYXZlIGhhcmR3YXJlIGVycmF0YS4NCj4gPiA+ID4N
Cj4gPiA+IEkgd2FudCB0byBlbmFibGUgQVNQTShMMCAtPiBMMSkgYW5kIGRpc2FibGUgQVNQTShM
MSAtPiBMMCksIHdoaWNoDQo+ID4gPiBpbnRlcmZhY2UgY2FuIEkgdXNlPw0KPiA+DQo+ID4gWW91
IGNhbiB1c2UgcGNpX2Rpc2FibGVfbGlua19zdGF0ZSgpIHRvIGRpc2FibGUgdXNhZ2Ugb2YgTDEu
DQo+ID4NCj4gPiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBwY2lfZW5hYmxl
X2xpbmtfc3RhdGUoKS4gIFdoYXQgaWYNCj4gPiB3ZSBhZGRlZCBzb21ldGhpbmcgbGlrZSB0aGUg
Zm9sbG93aW5nICh1bnRlc3RlZCk/ICBXb3VsZCB0aGF0IHdvcmsgZm9yDQo+ID4geW91Pw0KPiAN
Cj4gSGkgUnVpLA0KPiANCj4gQW55IHRob3VnaHRzIG9uIHRoZSBwYXRjaCBiZWxvdz8NCg0KSSdt
IGJ1c3kgd2l0aCBvdGhlciB3b3JrLCB0aGUgcGF0Y2ggc2VlbXMgb2ssIEkgd2lsbCB0ZXN0IGl0
IGxhdGVyLg0KPiANCj4gPiBjb21taXQgMjA5OTMwZDgwOWZhNjAyYjhhYWZkZDE3MWIyNjcxOWNl
ZTZjNjY0OQ0KPiA+IEF1dGhvcjogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4N
Cj4gPiBEYXRlOiAgIFdlZCBEZWMgMjcgMTY6NTY6MjYgMjAxNyAtMDYwMA0KPiA+DQo+ID4gICAg
IFBDSS9BU1BNOiBBZGQgcGNpX2VuYWJsZV9saW5rX3N0YXRlKCkNCj4gPg0KPiA+ICAgICBTb21l
IGRyaXZlcnMgd2FudCBjb250cm9sIG92ZXIgdGhlIEFTUE0gc3RhdGVzIHRoZWlyIGRldmljZSBp
cyBhbGxvd2VkDQo+IHRvDQo+ID4gICAgIHVzZS4gIFdlIGFscmVhZHkgaGF2ZSBhIHBjaV9kaXNh
YmxlX2xpbmtfc3RhdGUoKSwgYW5kIGRyaXZlcnMgY2FuIHVzZQ0KPiB0aGF0DQo+ID4gICAgIHRv
IHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGVudGVyaW5nIEwwIG9yIEwxcy4NCj4gPg0KPiA+ICAg
ICBBZGQgYSBjb3JyZXNwb25kaW5nIHBjaV9lbmFibGVfbGlua19zdGF0ZSgpIHNvIGEgZHJpdmVy
IGNhbiBlbmFibGUgdXNlDQo+IG9mDQo+ID4gICAgIEwwIG9yIEwxcyBhZ2Fpbi4NCj4gPg0KPiA+
IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUv
YXNwbS5jIGluZGV4DQo+ID4gM2I5YjRkNTBjZDk4Li5jYTIxNzE5NWY4MDAgMTAwNjQ0DQo+ID4g
LS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9wY2ll
L2FzcG0uYw0KPiA+IEBAIC0xMDI4LDYgKzEwMjgsNjcgQEAgdm9pZCBwY2llX2FzcG1fcG93ZXJz
YXZlX2NvbmZpZ19saW5rKHN0cnVjdA0KPiBwY2lfZGV2ICpwZGV2KQ0KPiA+ICAJdXBfcmVhZCgm
cGNpX2J1c19zZW0pOw0KPiA+ICB9DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAqIHBjaV9lbmFibGVf
bGlua19zdGF0ZSAtIEVuYWJsZSBkZXZpY2UncyBsaW5rIHN0YXRlLCBzbyB0aGUgbGluaw0KPiA+
ICttYXkNCj4gPiArICogZW50ZXIgc3BlY2lmaWMgc3RhdGVzLiAgTm90ZSB0aGF0IGlmIHRoZSBC
SU9TIGRpZG4ndCBncmFudCBBU1BNDQo+ID4gKyAqIGNvbnRyb2wgdG8gdGhlIE9TLCB0aGlzIGRv
ZXMgbm90aGluZyBiZWNhdXNlIHdlIGNhbid0IHRvdWNoIHRoZQ0KPiA+ICtMTktDVEwNCj4gPiAr
ICogcmVnaXN0ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIEBwZGV2OiBQQ0kgZGV2aWNlDQo+ID4gKyAq
IEBzdGF0ZTogQVNQTSBsaW5rIHN0YXRlIHRvIGVuYWJsZQ0KPiA+ICsgKi8NCj4gPiArdm9pZCBw
Y2lfZW5hYmxlX2xpbmtfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzdGF0ZSkgew0K
PiA+ICsJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHBkZXYtPmJ1cy0+c2VsZjsNCj4gPiArCXN0
cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbms7DQo+ID4gKwl1MzIgbG5rY2FwOw0KPiA+ICsNCj4g
PiArCWlmICghcGNpX2lzX3BjaWUocGRldikpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiAr
CWlmIChwZGV2LT5oYXNfc2Vjb25kYXJ5X2xpbmspDQo+ID4gKwkJcGFyZW50ID0gcGRldjsNCj4g
PiArCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmxpbmtfc3RhdGUpDQo+ID4gKwkJcmV0dXJuOw0K
PiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBBIGRyaXZlciByZXF1ZXN0ZWQgdGhhdCBBU1BNIGJl
IGVuYWJsZWQgb24gdGhpcyBkZXZpY2UsIGJ1dA0KPiA+ICsJICogaWYgd2UgZG9uJ3QgaGF2ZSBw
ZXJtaXNzaW9uIHRvIG1hbmFnZSBBU1BNIChlLmcuLCBvbiBBQ1BJDQo+ID4gKwkgKiBzeXN0ZW1z
IHdlIGhhdmUgdG8gb2JzZXJ2ZSB0aGUgRkFEVCBBQ1BJX0ZBRFRfTk9fQVNQTSBiaXQgYW5kDQo+
ID4gKwkgKiB0aGUgX09TQyBtZXRob2QpLCB3ZSBjYW4ndCBob25vciB0aGF0IHJlcXVlc3QuICBX
aW5kb3dzIGhhcw0KPiA+ICsJICogYSBzaW1pbGFyIG1lY2hhbmlzbSB1c2luZyAiUGNpQVNQTU9w
dE91dCIsIHdoaWNoIGlzIGFsc28NCj4gPiArCSAqIGlnbm9yZWQgaW4gdGhpcyBzaXR1YXRpb24u
DQo+ID4gKwkgKi8NCj4gPiArCWlmIChhc3BtX2Rpc2FibGVkKSB7DQo+ID4gKwkJZGV2X3dhcm4o
JnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBBU1BNOyBPUyBkb2Vzbid0IGhhdmUgQVNQTQ0KPiBj
b250cm9sXG4iKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZG93bl9y
ZWFkKCZwY2lfYnVzX3NlbSk7DQo+ID4gKwltdXRleF9sb2NrKCZhc3BtX2xvY2spOw0KPiA+ICsJ
bGluayA9IHBhcmVudC0+bGlua19zdGF0ZTsNCj4gPiArCWlmIChzdGF0ZSAmIFBDSUVfTElOS19T
VEFURV9MMFMpDQo+ID4gKwkJbGluay0+YXNwbV9kaXNhYmxlICY9IH5BU1BNX1NUQVRFX0wwUzsN
Cj4gPiArCWlmIChzdGF0ZSAmIFBDSUVfTElOS19TVEFURV9MMSkNCj4gPiArCQlsaW5rLT5hc3Bt
X2Rpc2FibGUgJj0gfkFTUE1fU1RBVEVfTDE7DQo+ID4gKwlwY2llX2NvbmZpZ19hc3BtX2xpbmso
bGluaywgcG9saWN5X3RvX2FzcG1fc3RhdGUobGluaykpOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4g
KwkgKiBFbmFibGUgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudCBpZiByZXF1ZXN0ZWQgYnkgdGhlIGRy
aXZlciwNCj4gPiArCSAqIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBhbmQgYWxsb3dlZCBieSB0
aGUgY3VycmVudCBwb2xpY3kuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChzdGF0ZSAmIFBDSUVfTElO
S19TVEFURV9DTEtQTSkgew0KPiA+ICsJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYs
IFBDSV9FWFBfTE5LQ0FQLCAmbG5rY2FwKTsNCj4gPiArCQlpZiAobG5rY2FwICYgUENJX0VYUF9M
TktDQVBfQ0xLUE0pIHsNCj4gPiArCQkJbGluay0+Y2xrcG1fY2FwYWJsZSA9IDE7DQo+ID4gKwkJ
CXBjaWVfc2V0X2Nsa3BtKGxpbmssIHBvbGljeV90b19jbGtwbV9zdGF0ZShsaW5rKSk7DQo+ID4g
KwkJfQ0KPiA+ICsJfQ0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOw0KPiA+ICsJdXBf
cmVhZCgmcGNpX2J1c19zZW0pOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0wocGNpX2VuYWJs
ZV9saW5rX3N0YXRlKTsNCj4gPiArDQo+ID4gIHN0YXRpYyB2b2lkIF9fcGNpX2Rpc2FibGVfbGlu
a19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHN0YXRlLA0KPiA+IGJvb2wgc2VtKSAg
ew0KPiA+ICAJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IHBkZXYtPmJ1cy0+c2VsZjsgZGlmZiAt
LWdpdA0KPiA+IGEvaW5jbHVkZS9saW51eC9wY2ktYXNwbS5oIGIvaW5jbHVkZS9saW51eC9wY2kt
YXNwbS5oIGluZGV4DQo+ID4gZGYyOGFmNWNlZjIxLi5jZDA3MzZiMzg0YWUgMTAwNjQ0DQo+ID4g
LS0tIGEvaW5jbHVkZS9saW51eC9wY2ktYXNwbS5oDQo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9w
Y2ktYXNwbS5oDQo+ID4gQEAgLTI0LDEwICsyNCwxMiBAQA0KPiA+ICAjZGVmaW5lIFBDSUVfTElO
S19TVEFURV9DTEtQTQk0DQo+ID4NCj4gPiAgI2lmZGVmIENPTkZJR19QQ0lFQVNQTQ0KPiA+ICt2
b2lkIHBjaV9lbmFibGVfbGlua19zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHN0YXRl
KTsNCj4gPiAgdm9pZCBwY2lfZGlzYWJsZV9saW5rX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2
LCBpbnQgc3RhdGUpOyAgdm9pZA0KPiA+IHBjaV9kaXNhYmxlX2xpbmtfc3RhdGVfbG9ja2VkKHN0
cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc3RhdGUpOyAgdm9pZA0KPiA+IHBjaWVfbm9fYXNwbSh2
b2lkKTsgICNlbHNlDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZW5hYmxlX2xpbmtfc3Rh
dGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludA0KPiA+ICtzdGF0ZSkgeyB9DQo+ID4gIHN0YXRp
YyBpbmxpbmUgdm9pZCBwY2lfZGlzYWJsZV9saW5rX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2
LCBpbnQNCj4gPiBzdGF0ZSkgeyB9ICBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9ub19hc3BtKHZv
aWQpIHsgfSAgI2VuZGlmDQo+IA0KPiAtLS0tLS1QbGVhc2UgY29uc2lkZXIgdGhlIGVudmlyb25t
ZW50IGJlZm9yZSBwcmludGluZyB0aGlzIGUtbWFpbC4NCg==

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

* Re: 答复: 答复: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2018-01-19  7:38             ` 答复: " 冯锐
@ 2018-01-30 19:18               ` Bjorn Helgaas
  2018-02-01  8:45                 ` 答复: " 冯锐
  0 siblings, 1 reply; 10+ messages in thread
From: Bjorn Helgaas @ 2018-01-30 19:18 UTC (permalink / raw)
  To: 冯锐
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

On Fri, Jan 19, 2018 at 07:38:22AM +0000, 冯锐 wrote:
> > On Wed, Dec 27, 2017 at 05:37:50PM -0600, Bjorn Helgaas wrote:
> > > On Tue, Dec 19, 2017 at 08:15:24AM +0000, 冯锐 wrote:
> > > > > On Fri, Dec 15, 2017 at 09:42:45AM +0000, 冯锐 wrote:
> > > > > > > [+cc Hans, Dave, linux-pci]
> > > > > > >
> > > > > > > On Thu, Sep 07, 2017 at 04:26:39PM +0800,
> > > > > > > rui_feng@realsil.com.cn
> > > > > wrote:
> > > > > > > > From: Rui Feng <rui_feng@realsil.com.cn>
> > > > > > >
> > > > > > > I wish this had been posted to linux-pci before being merged.
> > > > > > >
> > > > > > > I'm concerned because some of this appears to overlap and
> > > > > > > conflict with PCI core management of ASPM.
> > > > > > >
> > > > > > > I assume these devices advertise ASPM support in their Link
> > > > > > > Capabilites registers, right?  If so, why isn't the existing
> > > > > > > PCI core ASPM support sufficient?
> > > > > > >
> > > > > > When L1SS is configured, the device(hardware) can't enter L1SS
> > > > > > status automatically, it need driver(software) to do some work
> > > > > > to achieve the
> > > > > function.
> > > > >
> > > > > So this is a hardware defect in the device?  As far as I know,
> > > > > ASPM and L1SS are specified such that they should work without special
> > driver support.
> > > > >
> > > > Yes, you can say that.
> > > >
> > > > > > > > Enable power saving for RTS5250S as following steps:
> > > > > > > > 1.Set 0xFE58 to enable clock power management.
> > > > > > >
> > > > > > > Is this clock power management something specific to RTS5250S,
> > > > > > > or is it standard PCIe architected stuff?
> > > > > > >
> > > > > > 0xFE58 is specific register to RTS5250S not standard PCIe architected
> > stuff.
> > > > >
> > > > > OK.  I asked because devices often mirror architected PCIe config
> > > > > things in device-specific MMIO space, and if I squint just right,
> > > > > I can sort of match up the register bits you used with things in the PCIe
> > spec.
> > > > >
> > > > > > > > 2.Check cfg space whether support L1SS or not.
> > > > > > >
> > > > > > > This sounds like standard PCIe ASPM L1 Substates, right?
> > > > > > >
> > > > > > Yes.
> > > > > >
> > > > > > > > 3.If support L1SS, set 0xFF03 to free clkreq.
> > > > > > > > 4.When entering idle status, enable aspm
> > > > > > > >   and set parameters for L1SS and LTR.
> > > > > > > > 5.Wnen entering run status, disable aspm
> > > > > > > >   and set parameters for L1SS and LTR.
> > > > > > >
> > > > > > > In general, drivers should not configure ASPM, L1SS, and LTR
> > > > > > > themselves; the PCI core should do that.
> > > > > > >
> > > > > > > If a driver needs to tweak ASPM at run-time, it should use
> > > > > > > interfaces exported by the PCI core to do so.
> > > > > > >
> > > > > > Which interface I can use to set ASPM? I use "pci_write_config_byte"
> > now.
> > > > >
> > > > > What do you need to do?  include/linux/pci-aspm.h exports
> > > > > pci_disable_link_state(), which is mainly used to avoid ASPM
> > > > > states that have hardware errata.
> > > > >
> > > > I want to enable ASPM(L0 -> L1) and disable ASPM(L1 -> L0), which
> > > > interface can I use?
> > >
> > > You can use pci_disable_link_state() to disable usage of L1.
> > >
> > > Currently there is no corresponding pci_enable_link_state().  What if
> > > we added something like the following (untested)?  Would that work for
> > > you?
> > 
> > Hi Rui,
> > 
> > Any thoughts on the patch below?
> 
> I'm busy with other work, the patch seems ok, I will test it later.

Any idea when you might get back to this?

If you can't do it, I can try doing it myself, but of course, I don't
know the details about the device errata and I wouldn't be able to
test it.

Bjorn

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

* 答复: 答复: 答复: 答复: [PATCH v6] mfd: Add support for RTS5250S power saving
  2018-01-30 19:18               ` Bjorn Helgaas
@ 2018-02-01  8:45                 ` 冯锐
  0 siblings, 0 replies; 10+ messages in thread
From: 冯锐 @ 2018-02-01  8:45 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: lee.jones, linux-kernel, Hans de Goede, Dave Jiang, linux-pci

PiANCj4gT24gRnJpLCBKYW4gMTksIDIwMTggYXQgMDc6Mzg6MjJBTSArMDAwMCwg5Yav6ZSQIHdy
b3RlOg0KPiA+ID4gT24gV2VkLCBEZWMgMjcsIDIwMTcgYXQgMDU6Mzc6NTBQTSAtMDYwMCwgQmpv
cm4gSGVsZ2FhcyB3cm90ZToNCj4gPiA+ID4gT24gVHVlLCBEZWMgMTksIDIwMTcgYXQgMDg6MTU6
MjRBTSArMDAwMCwg5Yav6ZSQIHdyb3RlOg0KPiA+ID4gPiA+ID4gT24gRnJpLCBEZWMgMTUsIDIw
MTcgYXQgMDk6NDI6NDVBTSArMDAwMCwg5Yav6ZSQIHdyb3RlOg0KPiA+ID4gPiA+ID4gPiA+IFsr
Y2MgSGFucywgRGF2ZSwgbGludXgtcGNpXQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+
ID4gT24gVGh1LCBTZXAgMDcsIDIwMTcgYXQgMDQ6MjY6MzlQTSArMDgwMCwNCj4gPiA+ID4gPiA+
ID4gPiBydWlfZmVuZ0ByZWFsc2lsLmNvbS5jbg0KPiA+ID4gPiA+ID4gd3JvdGU6DQo+ID4gPiA+
ID4gPiA+ID4gPiBGcm9tOiBSdWkgRmVuZyA8cnVpX2ZlbmdAcmVhbHNpbC5jb20uY24+DQo+ID4g
PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBJIHdpc2ggdGhpcyBoYWQgYmVlbiBwb3N0ZWQg
dG8gbGludXgtcGNpIGJlZm9yZSBiZWluZyBtZXJnZWQuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+
ID4gPiA+ID4gPiBJJ20gY29uY2VybmVkIGJlY2F1c2Ugc29tZSBvZiB0aGlzIGFwcGVhcnMgdG8g
b3ZlcmxhcCBhbmQNCj4gPiA+ID4gPiA+ID4gPiBjb25mbGljdCB3aXRoIFBDSSBjb3JlIG1hbmFn
ZW1lbnQgb2YgQVNQTS4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEkgYXNzdW1l
IHRoZXNlIGRldmljZXMgYWR2ZXJ0aXNlIEFTUE0gc3VwcG9ydCBpbiB0aGVpcg0KPiA+ID4gPiA+
ID4gPiA+IExpbmsgQ2FwYWJpbGl0ZXMgcmVnaXN0ZXJzLCByaWdodD8gIElmIHNvLCB3aHkgaXNu
J3QgdGhlDQo+ID4gPiA+ID4gPiA+ID4gZXhpc3RpbmcgUENJIGNvcmUgQVNQTSBzdXBwb3J0IHN1
ZmZpY2llbnQ/DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gV2hlbiBMMVNTIGlzIGNv
bmZpZ3VyZWQsIHRoZSBkZXZpY2UoaGFyZHdhcmUpIGNhbid0IGVudGVyDQo+ID4gPiA+ID4gPiA+
IEwxU1Mgc3RhdHVzIGF1dG9tYXRpY2FsbHksIGl0IG5lZWQgZHJpdmVyKHNvZnR3YXJlKSB0byBk
bw0KPiA+ID4gPiA+ID4gPiBzb21lIHdvcmsgdG8gYWNoaWV2ZSB0aGUNCj4gPiA+ID4gPiA+IGZ1
bmN0aW9uLg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IFNvIHRoaXMgaXMgYSBoYXJkd2FyZSBk
ZWZlY3QgaW4gdGhlIGRldmljZT8gIEFzIGZhciBhcyBJIGtub3csDQo+ID4gPiA+ID4gPiBBU1BN
IGFuZCBMMVNTIGFyZSBzcGVjaWZpZWQgc3VjaCB0aGF0IHRoZXkgc2hvdWxkIHdvcmsgd2l0aG91
dA0KPiA+ID4gPiA+ID4gc3BlY2lhbA0KPiA+ID4gZHJpdmVyIHN1cHBvcnQuDQo+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+IFllcywgeW91IGNhbiBzYXkgdGhhdC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+ID4gRW5hYmxlIHBvd2VyIHNhdmluZyBmb3IgUlRTNTI1MFMgYXMgZm9sbG93aW5nIHN0
ZXBzOg0KPiA+ID4gPiA+ID4gPiA+ID4gMS5TZXQgMHhGRTU4IHRvIGVuYWJsZSBjbG9jayBwb3dl
ciBtYW5hZ2VtZW50Lg0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gSXMgdGhpcyBj
bG9jayBwb3dlciBtYW5hZ2VtZW50IHNvbWV0aGluZyBzcGVjaWZpYyB0bw0KPiA+ID4gPiA+ID4g
PiA+IFJUUzUyNTBTLCBvciBpcyBpdCBzdGFuZGFyZCBQQ0llIGFyY2hpdGVjdGVkIHN0dWZmPw0K
PiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IDB4RkU1OCBpcyBzcGVjaWZpYyByZWdpc3Rl
ciB0byBSVFM1MjUwUyBub3Qgc3RhbmRhcmQgUENJZQ0KPiA+ID4gPiA+ID4gPiBhcmNoaXRlY3Rl
ZA0KPiA+ID4gc3R1ZmYuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gT0suICBJIGFza2VkIGJl
Y2F1c2UgZGV2aWNlcyBvZnRlbiBtaXJyb3IgYXJjaGl0ZWN0ZWQgUENJZQ0KPiA+ID4gPiA+ID4g
Y29uZmlnIHRoaW5ncyBpbiBkZXZpY2Utc3BlY2lmaWMgTU1JTyBzcGFjZSwgYW5kIGlmIEkgc3F1
aW50DQo+ID4gPiA+ID4gPiBqdXN0IHJpZ2h0LCBJIGNhbiBzb3J0IG9mIG1hdGNoIHVwIHRoZSBy
ZWdpc3RlciBiaXRzIHlvdSB1c2VkDQo+ID4gPiA+ID4gPiB3aXRoIHRoaW5ncyBpbiB0aGUgUENJ
ZQ0KPiA+ID4gc3BlYy4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiAyLkNoZWNrIGNm
ZyBzcGFjZSB3aGV0aGVyIHN1cHBvcnQgTDFTUyBvciBub3QuDQo+ID4gPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+ID4gPiBUaGlzIHNvdW5kcyBsaWtlIHN0YW5kYXJkIFBDSWUgQVNQTSBMMSBTdWJz
dGF0ZXMsIHJpZ2h0Pw0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IFllcy4NCj4gPiA+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiA+IDMuSWYgc3VwcG9ydCBMMVNTLCBzZXQgMHhGRjAz
IHRvIGZyZWUgY2xrcmVxLg0KPiA+ID4gPiA+ID4gPiA+ID4gNC5XaGVuIGVudGVyaW5nIGlkbGUg
c3RhdHVzLCBlbmFibGUgYXNwbQ0KPiA+ID4gPiA+ID4gPiA+ID4gICBhbmQgc2V0IHBhcmFtZXRl
cnMgZm9yIEwxU1MgYW5kIExUUi4NCj4gPiA+ID4gPiA+ID4gPiA+IDUuV25lbiBlbnRlcmluZyBy
dW4gc3RhdHVzLCBkaXNhYmxlIGFzcG0NCj4gPiA+ID4gPiA+ID4gPiA+ICAgYW5kIHNldCBwYXJh
bWV0ZXJzIGZvciBMMVNTIGFuZCBMVFIuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4g
PiBJbiBnZW5lcmFsLCBkcml2ZXJzIHNob3VsZCBub3QgY29uZmlndXJlIEFTUE0sIEwxU1MsIGFu
ZA0KPiA+ID4gPiA+ID4gPiA+IExUUiB0aGVtc2VsdmVzOyB0aGUgUENJIGNvcmUgc2hvdWxkIGRv
IHRoYXQuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBJZiBhIGRyaXZlciBuZWVk
cyB0byB0d2VhayBBU1BNIGF0IHJ1bi10aW1lLCBpdCBzaG91bGQgdXNlDQo+ID4gPiA+ID4gPiA+
ID4gaW50ZXJmYWNlcyBleHBvcnRlZCBieSB0aGUgUENJIGNvcmUgdG8gZG8gc28uDQo+ID4gPiA+
ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gV2hpY2ggaW50ZXJmYWNlIEkgY2FuIHVzZSB0byBzZXQg
QVNQTT8gSSB1c2UNCj4gInBjaV93cml0ZV9jb25maWdfYnl0ZSINCj4gPiA+IG5vdy4NCj4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiBXaGF0IGRvIHlvdSBuZWVkIHRvIGRvPyAgaW5jbHVkZS9saW51
eC9wY2ktYXNwbS5oIGV4cG9ydHMNCj4gPiA+ID4gPiA+IHBjaV9kaXNhYmxlX2xpbmtfc3RhdGUo
KSwgd2hpY2ggaXMgbWFpbmx5IHVzZWQgdG8gYXZvaWQgQVNQTQ0KPiA+ID4gPiA+ID4gc3RhdGVz
IHRoYXQgaGF2ZSBoYXJkd2FyZSBlcnJhdGEuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+IEkgd2Fu
dCB0byBlbmFibGUgQVNQTShMMCAtPiBMMSkgYW5kIGRpc2FibGUgQVNQTShMMSAtPiBMMCksDQo+
ID4gPiA+ID4gd2hpY2ggaW50ZXJmYWNlIGNhbiBJIHVzZT8NCj4gPiA+ID4NCj4gPiA+ID4gWW91
IGNhbiB1c2UgcGNpX2Rpc2FibGVfbGlua19zdGF0ZSgpIHRvIGRpc2FibGUgdXNhZ2Ugb2YgTDEu
DQo+ID4gPiA+DQo+ID4gPiA+IEN1cnJlbnRseSB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIHBj
aV9lbmFibGVfbGlua19zdGF0ZSgpLiAgV2hhdA0KPiA+ID4gPiBpZiB3ZSBhZGRlZCBzb21ldGhp
bmcgbGlrZSB0aGUgZm9sbG93aW5nICh1bnRlc3RlZCk/ICBXb3VsZCB0aGF0DQo+ID4gPiA+IHdv
cmsgZm9yIHlvdT8NCj4gPiA+DQo+ID4gPiBIaSBSdWksDQo+ID4gPg0KPiA+ID4gQW55IHRob3Vn
aHRzIG9uIHRoZSBwYXRjaCBiZWxvdz8NCj4gPg0KPiA+IEknbSBidXN5IHdpdGggb3RoZXIgd29y
aywgdGhlIHBhdGNoIHNlZW1zIG9rLCBJIHdpbGwgdGVzdCBpdCBsYXRlci4NCj4gDQo+IEFueSBp
ZGVhIHdoZW4geW91IG1pZ2h0IGdldCBiYWNrIHRvIHRoaXM/DQo+IA0KPiBJZiB5b3UgY2FuJ3Qg
ZG8gaXQsIEkgY2FuIHRyeSBkb2luZyBpdCBteXNlbGYsIGJ1dCBvZiBjb3Vyc2UsIEkgZG9uJ3Qg
a25vdyB0aGUgZGV0YWlscw0KPiBhYm91dCB0aGUgZGV2aWNlIGVycmF0YSBhbmQgSSB3b3VsZG4n
dCBiZSBhYmxlIHRvIHRlc3QgaXQuDQo+IA0KT2YgY291cnNlLCB5b3UgY2FuIGRvIGl0IGZpcnN0
Lg0KDQo+IEJqb3JuDQo+IA0KPiAtLS0tLS1QbGVhc2UgY29uc2lkZXIgdGhlIGVudmlyb25tZW50
IGJlZm9yZSBwcmludGluZyB0aGlzIGUtbWFpbC4NCg==

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

end of thread, other threads:[~2018-02-01  8:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1504772799-15173-1-git-send-email-rui_feng@realsil.com.cn>
2017-12-14 22:25 ` [PATCH v6] mfd: Add support for RTS5250S power saving Bjorn Helgaas
2017-12-15  7:41   ` Hans de Goede
2017-12-15  9:42   ` 答复: " 冯锐
2017-12-15 15:15     ` Bjorn Helgaas
2017-12-19  8:15       ` 答复: " 冯锐
2017-12-27 23:37         ` Bjorn Helgaas
2018-01-17 21:01           ` Bjorn Helgaas
2018-01-19  7:38             ` 答复: " 冯锐
2018-01-30 19:18               ` Bjorn Helgaas
2018-02-01  8:45                 ` 答复: " 冯锐

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).