* [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto. @ 2014-09-23 4:11 Richard Zhu 2014-09-23 4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu ` (5 more replies) 0 siblings, 6 replies; 31+ messages in thread From: Richard Zhu @ 2014-09-23 4:11 UTC (permalink / raw) To: linux-pci-owner; +Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey Hi Tim: After I changed the wait clocks stabilize delay after pcie_ref_en is set in this patch-set. Can you help to make a double check whether it's ok or not at your side? Thanks in advanced. Main changes since the v1: 1. Regarding to Lucas' comments, seperated the enalbe pcie on imx6qdl sabreauto patch. 2. Add the description why the wait clock stabilize delay should be run after pcie_ref_en is set. 3. Return 0 directly in suspend call back. Main changes since the RFC: Thanks for quick review from Lucas. 1. seperate the smashed patch-set. 2. remove the "power-on-gpio". 3. add/update the pcie-supply of the dts and binding. 4. [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu @ 2014-09-23 4:11 ` Richard Zhu 2014-09-23 9:19 ` Lucas Stach 2014-09-23 12:40 ` Fabio Estevam 2014-09-23 4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu ` (4 subsequent siblings) 5 siblings, 2 replies; 31+ messages in thread From: Richard Zhu @ 2014-09-23 4:11 UTC (permalink / raw) To: linux-pci-owner Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu - enable pcie on imx6qdl sabreauto boards. Signed-off-by: Richard Zhu <r65037@freescale.com> --- arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi index 009abd6..d6040a5 100644 --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi @@ -410,6 +410,10 @@ }; }; +&pcie { + status = "okay"; +}; + &pwm3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm3>; -- 1.9.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-23 4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu @ 2014-09-23 9:19 ` Lucas Stach 2014-09-23 12:40 ` Fabio Estevam 1 sibling, 0 replies; 31+ messages in thread From: Lucas Stach @ 2014-09-23 9:19 UTC (permalink / raw) To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: > - enable pcie on imx6qdl sabreauto boards. > > Signed-off-by: Richard Zhu <r65037@freescale.com> Reviewed-by: Lucas Stach <l.stach@pengutronix.de> > --- > arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi > index 009abd6..d6040a5 100644 > --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi > +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi > @@ -410,6 +410,10 @@ > }; > }; > > +&pcie { > + status = "okay"; > +}; > + > &pwm3 { > pinctrl-names = "default"; > pinctrl-0 = <&pinctrl_pwm3>; -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-23 4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu 2014-09-23 9:19 ` Lucas Stach @ 2014-09-23 12:40 ` Fabio Estevam 2014-09-24 2:54 ` Hong-Xing.Zhu 1 sibling, 1 reply; 31+ messages in thread From: Fabio Estevam @ 2014-09-23 12:40 UTC (permalink / raw) To: Richard Zhu Cc: linux-pci-owner, linux-pci@vger.kernel.org, Shawn Guo, Lucas Stach, Tim Harvey Hi Richard, On Tue, Sep 23, 2014 at 1:11 AM, Richard Zhu <r65037@freescale.com> wrote: > - enable pcie on imx6qdl sabreauto boards. > > Signed-off-by: Richard Zhu <r65037@freescale.com> > --- > arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi > index 009abd6..d6040a5 100644 > --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi > +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi > @@ -410,6 +410,10 @@ > }; > }; > > +&pcie { > + status = "okay"; > +}; It would be better if you could pass the PCI reset pin that comes from the GPIO expander. ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-23 12:40 ` Fabio Estevam @ 2014-09-24 2:54 ` Hong-Xing.Zhu 2014-09-24 21:04 ` Fabio Estevam 0 siblings, 1 reply; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-24 2:54 UTC (permalink / raw) To: Fabio Estevam Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Lucas Stach, Tim Harvey SGkgRmFiaW8NCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZhYmlv IEVzdGV2YW0gW21haWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIFNl cHRlbWJlciAyMywgMjAxNCA4OjQxIFBNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6 IGxpbnV4LXBjaS1vd25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5v cmc7IEd1byBTaGF3bi0NCj4gUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleQ0KPiBTdWJq ZWN0OiBSZTogW1BBVENIIHYyIDEvNV0gUENJOiBpbXg2OiBlbmFibGUgcGNpZSBvbiBpbXg2cWRs IHNhYnJlYXV0bw0KPiANCj4gSGkgUmljaGFyZCwNCj4gDQo+IE9uIFR1ZSwgU2VwIDIzLCAyMDE0 IGF0IDE6MTEgQU0sIFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4gd3JvdGU6DQo+ ID4gLSBlbmFibGUgcGNpZSBvbiBpbXg2cWRsIHNhYnJlYXV0byBib2FyZHMuDQo+ID4NCj4gPiBT aWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFpodSA8cjY1MDM3QGZyZWVzY2FsZS5jb20+DQo+ID4gLS0t DQo+ID4gIGFyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kgfCA0ICsrKysN Cj4gPiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQ0KPiA+DQo+ID4gZGlmZiAtLWdp dCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kNCj4gPiBiL2FyY2gv YXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kNCj4gPiBpbmRleCAwMDlhYmQ2Li5k NjA0MGE1IDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVh dXRvLmR0c2kNCj4gPiArKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlYXV0by5k dHNpDQo+ID4gQEAgLTQxMCw2ICs0MTAsMTAgQEANCj4gPiAgICAgICAgIH07DQo+ID4gIH07DQo+ ID4NCj4gPiArJnBjaWUgew0KPiA+ICsgICAgICAgc3RhdHVzID0gIm9rYXkiOw0KPiA+ICt9Ow0K PiANCj4gSXQgd291bGQgYmUgYmV0dGVyIGlmIHlvdSBjb3VsZCBwYXNzIHRoZSBQQ0kgcmVzZXQg cGluIHRoYXQgY29tZXMgZnJvbSB0aGUNCj4gR1BJTyBleHBhbmRlci4NCltSaWNoYXJkXSA2cWRs IHNhYnJlYXV0byBib2FyZHMgZG9uJ3QgaGF2ZSB0aGUgcGNpZSByZXNldCBncGlvIGluIHRoZSBi b2FyZCBkZXNpZ24gYXQgYWxsLg0KDQpCZXN0IFJlZ2FyZHMNClJpY2hhcmQgWmh1DQo= ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-24 2:54 ` Hong-Xing.Zhu @ 2014-09-24 21:04 ` Fabio Estevam 2014-09-25 1:21 ` Hong-Xing.Zhu 0 siblings, 1 reply; 31+ messages in thread From: Fabio Estevam @ 2014-09-24 21:04 UTC (permalink / raw) To: Hong-Xing.Zhu@freescale.com Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Lucas Stach, Tim Harvey Hi Richard, On Tue, Sep 23, 2014 at 11:54 PM, Hong-Xing.Zhu@freescale.com <Hong-Xing.Zhu@freescale.com> wrote: > [Richard] 6qdl sabreauto boards don't have the pcie reset gpio in the board design at all. I have just downloaded the mx6 sabreauto board schematics from freescale.com and it matches the one I have seen before. You can search for the CPU_PER_RST_B signal. It is connected via R785 0 ohm resistor to PCIE_RST_B. CPU_PER_RST_B can be controlled via MAX7310 pin IO/2. ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-24 21:04 ` Fabio Estevam @ 2014-09-25 1:21 ` Hong-Xing.Zhu 2014-09-25 1:39 ` Fabio Estevam 0 siblings, 1 reply; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-25 1:21 UTC (permalink / raw) To: Fabio Estevam Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Lucas Stach, Tim Harvey SGkgRmFiaW86DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogRmFiaW8g RXN0ZXZhbSBbbWFpbHRvOmZlc3RldmFtQGdtYWlsLmNvbV0NCj4gU2VudDogVGh1cnNkYXksIFNl cHRlbWJlciAyNSwgMjAxNCA1OjA0IEFNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6 IGxpbnV4LXBjaS1vd25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5v cmc7IEd1byBTaGF3bi0NCj4gUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleQ0KPiBTdWJq ZWN0OiBSZTogW1BBVENIIHYyIDEvNV0gUENJOiBpbXg2OiBlbmFibGUgcGNpZSBvbiBpbXg2cWRs IHNhYnJlYXV0bw0KPiANCj4gSGkgUmljaGFyZCwNCj4gDQo+IE9uIFR1ZSwgU2VwIDIzLCAyMDE0 IGF0IDExOjU0IFBNLCBIb25nLVhpbmcuWmh1QGZyZWVzY2FsZS5jb20gPEhvbmctDQo+IFhpbmcu Wmh1QGZyZWVzY2FsZS5jb20+IHdyb3RlOg0KPiANCj4gPiBbUmljaGFyZF0gNnFkbCBzYWJyZWF1 dG8gYm9hcmRzIGRvbid0IGhhdmUgdGhlIHBjaWUgcmVzZXQgZ3BpbyBpbiB0aGUgYm9hcmQNCj4g ZGVzaWduIGF0IGFsbC4NCj4gDQo+IEkgaGF2ZSBqdXN0IGRvd25sb2FkZWQgdGhlIG14NiBzYWJy ZWF1dG8gYm9hcmQgc2NoZW1hdGljcyBmcm9tIGZyZWVzY2FsZS5jb20NCj4gYW5kIGl0IG1hdGNo ZXMgdGhlIG9uZSBJIGhhdmUgc2VlbiBiZWZvcmUuDQo+IA0KPiBZb3UgY2FuIHNlYXJjaCBmb3Ig dGhlIENQVV9QRVJfUlNUX0Igc2lnbmFsLiBJdCBpcyBjb25uZWN0ZWQgdmlhIFI3ODUNCj4gMCBv aG0gcmVzaXN0b3IgdG8gUENJRV9SU1RfQi4NCj4gDQo+IENQVV9QRVJfUlNUX0IgY2FuIGJlIGNv bnRyb2xsZWQgdmlhIE1BWDczMTAgcGluIElPLzIuDQpbUmljaGFyZF0gWWVzIGl0IGlzLiBPbiBB UkQgYm9hcmQsIHRoZSBQQ0lFX1JTVF9CIGlzIGNvbm5lY3RlZCB0byBDUFVfUEVSX1JTVF9CLg0K QnV0IHRoaXMgaXMgbm90IG9uZSBzaWduYWwgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieSBQQ0lF IG1vZHVsZSBpdHNlbGYuDQpJdCBpcyBraWNrZWQgb25jZSBhdCB0aGUgbW9tZW50IHdoZW4gdGhl IGJvYXJkIGlzIHBvd2VyZWQgdXAuDQoNCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg== ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-25 1:21 ` Hong-Xing.Zhu @ 2014-09-25 1:39 ` Fabio Estevam 2014-09-25 2:02 ` Hong-Xing.Zhu 0 siblings, 1 reply; 31+ messages in thread From: Fabio Estevam @ 2014-09-25 1:39 UTC (permalink / raw) To: Hong-Xing.Zhu@freescale.com Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Lucas Stach, Tim Harvey On Wed, Sep 24, 2014 at 10:21 PM, Hong-Xing.Zhu@freescale.com <Hong-Xing.Zhu@freescale.com> wrote: > [Richard] Yes it is. On ARD board, the PCIE_RST_B is connected to CPU_PER_RST_B. > But this is not one signal that can be controlled by PCIE module itself. Let's take imx6qdl-sabresd.dtsi for example: &pcie { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pcie>; reset-gpio = <&gpio7 12 0>; status = "okay"; }; It uses GPIO7_12 for PCI reset. For sabreauto we just need to change to something like this format: reset-gpio = <&max7310_b 2 0>; > It is kicked once at the moment when the board is powered up. Yes, the signal is connected to power-on and it can also be independently controlled via MAX7310. Anyway, no need to change this if you don't want. I can send a patch adding the reset later :-) ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto 2014-09-25 1:39 ` Fabio Estevam @ 2014-09-25 2:02 ` Hong-Xing.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-25 2:02 UTC (permalink / raw) To: Fabio Estevam Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Lucas Stach, Tim Harvey SGkgRmFiaW86DQoNCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZh YmlvIEVzdGV2YW0gW21haWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IFRodXJzZGF5 LCBTZXB0ZW1iZXIgMjUsIDIwMTQgOTo0MCBBTQ0KPiBUbzogWmh1IFJpY2hhcmQtUjY1MDM3DQo+ IENjOiBsaW51eC1wY2ktb3duZXJAdmdlci5rZXJuZWwub3JnOyBsaW51eC1wY2lAdmdlci5rZXJu ZWwub3JnOyBHdW8gU2hhd24tDQo+IFI2NTA3MzsgTHVjYXMgU3RhY2g7IFRpbSBIYXJ2ZXkNCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2MiAxLzVdIFBDSTogaW14NjogZW5hYmxlIHBjaWUgb24gaW14 NnFkbCBzYWJyZWF1dG8NCj4gDQo+IE9uIFdlZCwgU2VwIDI0LCAyMDE0IGF0IDEwOjIxIFBNLCBI b25nLVhpbmcuWmh1QGZyZWVzY2FsZS5jb20gPEhvbmctDQo+IFhpbmcuWmh1QGZyZWVzY2FsZS5j b20+IHdyb3RlOg0KPiA+IFtSaWNoYXJkXSBZZXMgaXQgaXMuIE9uIEFSRCBib2FyZCwgdGhlIFBD SUVfUlNUX0IgaXMgY29ubmVjdGVkIHRvDQo+IENQVV9QRVJfUlNUX0IuDQo+ID4gQnV0IHRoaXMg aXMgbm90IG9uZSBzaWduYWwgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieSBQQ0lFIG1vZHVsZSBp dHNlbGYuDQo+IA0KPiBMZXQncyB0YWtlIGlteDZxZGwtc2FicmVzZC5kdHNpIGZvciBleGFtcGxl Og0KPiANCj4gJnBjaWUgew0KPiAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsNCj4gICAg IHBpbmN0cmwtMCA9IDwmcGluY3RybF9wY2llPjsNCj4gICAgIHJlc2V0LWdwaW8gPSA8JmdwaW83 IDEyIDA+Ow0KPiAgICAgc3RhdHVzID0gIm9rYXkiOw0KPiB9Ow0KPiANCj4gSXQgdXNlcyBHUElP N18xMiBmb3IgUENJIHJlc2V0Lg0KPiANCj4gRm9yIHNhYnJlYXV0byB3ZSBqdXN0IG5lZWQgdG8g Y2hhbmdlIHRvIHNvbWV0aGluZyBsaWtlIHRoaXMgZm9ybWF0Og0KPiANCj4gcmVzZXQtZ3BpbyA9 IDwmbWF4NzMxMF9iIDIgMD47DQo+IA0KPiA+IEl0IGlzIGtpY2tlZCBvbmNlIGF0IHRoZSBtb21l bnQgd2hlbiB0aGUgYm9hcmQgaXMgcG93ZXJlZCB1cC4NCj4gDQo+IFllcywgdGhlIHNpZ25hbCBp cyBjb25uZWN0ZWQgdG8gcG93ZXItb24gYW5kIGl0IGNhbiBhbHNvIGJlIGluZGVwZW5kZW50bHkN Cj4gY29udHJvbGxlZCB2aWEgTUFYNzMxMC4NCj4gDQo+IEFueXdheSwgbm8gbmVlZCB0byBjaGFu Z2UgdGhpcyBpZiB5b3UgZG9uJ3Qgd2FudC4gSSBjYW4gc2VuZCBhIHBhdGNoIGFkZGluZw0KPiB0 aGUgcmVzZXQgbGF0ZXIgOi0pDQoNCltSaWNoYXJkXSBPbmUgbW9yZSBkZXBlbmRlbmN5LCB0aGlz IHNpZ25hbCB3b3VsZCBiZSBzaGFyZS11c2VkIGJ5IG11bHRpLW1vZHVsZXMuDQpJJ20gYWZyYWlk IHRoZSBvcGVyYXRpb25zIG9mIHRoZSBwY2llLXJlc2V0LWIgd291bGQgYnJpbmcgdW4tZXhjZXB0 aW9uYWwgdG8gb3RoZXIgbW9kdWxlcy4NCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0K ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu 2014-09-23 4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu @ 2014-09-23 4:11 ` Richard Zhu 2014-09-23 9:56 ` Lucas Stach ` (2 more replies) 2014-09-23 4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu ` (3 subsequent siblings) 5 siblings, 3 replies; 31+ messages in thread From: Richard Zhu @ 2014-09-23 4:11 UTC (permalink / raw) To: linux-pci-owner Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu - a while delay is mandatory required after pcie_ref_clk_en is set. Otherwise, the system would be hang on imx6qdl ard boards, because that imx6qdl boards don't have the reset_gpio. - the clocks should be stable already after the "clk_prepare_enable" is return. So I think it's ok to move the usleep delay after the pcie_ref_en is set. Signed-off-by: Richard Zhu <r65037@freescale.com> --- drivers/pci/host/pci-imx6.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 233fe8a..bc4222b 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) goto err_pcie; } - /* allow the clocks to stabilize */ - usleep_range(200, 500); - /* power up core phy and enable ref clock */ regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); + /* allow the clocks to stabilize */ + usleep_range(200, 500); + /* Some boards don't have PCIe reset GPIO. */ if (gpio_is_valid(imx6_pcie->reset_gpio)) { gpio_set_value(imx6_pcie->reset_gpio, 0); -- 1.9.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu @ 2014-09-23 9:56 ` Lucas Stach 2014-09-23 12:28 ` Tim Harvey 2014-09-23 12:45 ` Fabio Estevam 2014-10-24 1:51 ` Fabio Estevam 2 siblings, 1 reply; 31+ messages in thread From: Lucas Stach @ 2014-09-23 9:56 UTC (permalink / raw) To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: > - a while delay is mandatory required after pcie_ref_clk_en > is set. Otherwise, the system would be hang on imx6qdl ard > boards, because that imx6qdl boards don't have the reset_gpio. > - the clocks should be stable already after the > "clk_prepare_enable" is return. So I think it's ok to move the > usleep delay after the pcie_ref_en is set. > You are describing a lot of the conditions around the issue, but not the issue itself, which makes it hard to follow your commit message. After looking at the code I think the problem is this (and should be described accordingly): For boards without a reset gpio we skip the delay between enabling the pcie_ref_clk and touching the RC registers for configuration. Apparently this hangs when the clocks are not yet settled in the DW PCIe core. So we need to make sure that there is always an appropriate delay between those two actions. I have not found this constraint anywhere in the i.MX6 Reference Manual, nor in the DW PCIe documents I have access to, which makes me a bit feel a bit unhappy about this. Richard, do you have better info on why this delay is needed and how long it needs to be? Or is this just empirical? In general I'm ok with this patch, but still want a confirmation from Tim that this doesn't break anything. > Signed-off-by: Richard Zhu <r65037@freescale.com> > --- > drivers/pci/host/pci-imx6.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c > index 233fe8a..bc4222b 100644 > --- a/drivers/pci/host/pci-imx6.c > +++ b/drivers/pci/host/pci-imx6.c > @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) > goto err_pcie; > } > > - /* allow the clocks to stabilize */ > - usleep_range(200, 500); > - > /* power up core phy and enable ref clock */ > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); > > + /* allow the clocks to stabilize */ > + usleep_range(200, 500); > + > /* Some boards don't have PCIe reset GPIO. */ > if (gpio_is_valid(imx6_pcie->reset_gpio)) { > gpio_set_value(imx6_pcie->reset_gpio, 0); -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 9:56 ` Lucas Stach @ 2014-09-23 12:28 ` Tim Harvey 2014-09-25 5:21 ` Hong-Xing.Zhu 2014-10-01 18:00 ` Tim Harvey 0 siblings, 2 replies; 31+ messages in thread From: Tim Harvey @ 2014-09-23 12:28 UTC (permalink / raw) To: Lucas Stach, Richard Zhu Cc: linux-pci-owner, linux-pci@vger.kernel.org, Shawn Guo, Fabio Estevam On Tue, Sep 23, 2014 at 2:56 AM, Lucas Stach <l.stach@pengutronix.de> wrote: > Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: >> - a while delay is mandatory required after pcie_ref_clk_en >> is set. Otherwise, the system would be hang on imx6qdl ard >> boards, because that imx6qdl boards don't have the reset_gpio. >> - the clocks should be stable already after the >> "clk_prepare_enable" is return. So I think it's ok to move the >> usleep delay after the pcie_ref_en is set. >> > > You are describing a lot of the conditions around the issue, but not the > issue itself, which makes it hard to follow your commit message. After > looking at the code I think the problem is this (and should be described > accordingly): > > For boards without a reset gpio we skip the delay between enabling the > pcie_ref_clk and touching the RC registers for configuration. Apparently > this hangs when the clocks are not yet settled in the DW PCIe core. So > we need to make sure that there is always an appropriate delay between > those two actions. > > I have not found this constraint anywhere in the i.MX6 Reference Manual, > nor in the DW PCIe documents I have access to, which makes me a bit feel > a bit unhappy about this. Richard, do you have better info on why this > delay is needed and how long it needs to be? Or is this just empirical? > > In general I'm ok with this patch, but still want a confirmation from > Tim that this doesn't break anything. I agree with Lucas' comments and also agree that this can use some testing. Based on my previous findings PCI link is very fragile. It will take me a few days to get a proper test setup in a thermal chamber with a host of boards but I will report back when I have findings. Tim > >> Signed-off-by: Richard Zhu <r65037@freescale.com> >> --- >> drivers/pci/host/pci-imx6.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c >> index 233fe8a..bc4222b 100644 >> --- a/drivers/pci/host/pci-imx6.c >> +++ b/drivers/pci/host/pci-imx6.c >> @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) >> goto err_pcie; >> } >> >> - /* allow the clocks to stabilize */ >> - usleep_range(200, 500); >> - >> /* power up core phy and enable ref clock */ >> regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, >> IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); >> regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, >> IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); >> >> + /* allow the clocks to stabilize */ >> + usleep_range(200, 500); >> + >> /* Some boards don't have PCIe reset GPIO. */ >> if (gpio_is_valid(imx6_pcie->reset_gpio)) { >> gpio_set_value(imx6_pcie->reset_gpio, 0); > > -- > Pengutronix e.K. | Lucas Stach | > Industrial Linux Solutions | http://www.pengutronix.de/ | > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 12:28 ` Tim Harvey @ 2014-09-25 5:21 ` Hong-Xing.Zhu 2014-10-01 18:00 ` Tim Harvey 1 sibling, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-25 5:21 UTC (permalink / raw) To: Tim Harvey, Lucas Stach Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Fabio Estevam DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFRpbSBIYXJ2ZXkgW21haWx0 bzp0aGFydmV5QGdhdGV3b3Jrcy5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMywg MjAxNCA4OjI5IFBNDQo+IFRvOiBMdWNhcyBTdGFjaDsgWmh1IFJpY2hhcmQtUjY1MDM3DQo+IENj OiBsaW51eC1wY2ktb3duZXJAdmdlci5rZXJuZWwub3JnOyBsaW51eC1wY2lAdmdlci5rZXJuZWwu b3JnOyBHdW8gU2hhd24tDQo+IFI2NTA3MzsgRmFiaW8gRXN0ZXZhbQ0KPiBTdWJqZWN0OiBSZTog W1BBVENIIHYyIDIvNV0gUENJOiBpbXg2OiB3YWl0IHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplIGFm dGVyDQo+IHJlZl9lbg0KPiANCj4gT24gVHVlLCBTZXAgMjMsIDIwMTQgYXQgMjo1NiBBTSwgTHVj YXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+IHdyb3RlOg0KPiA+IEFtIERpZW5zdGFn LCBkZW4gMjMuMDkuMjAxNCwgMTI6MTEgKzA4MDAgc2NocmllYiBSaWNoYXJkIFpodToNCj4gPj4g LSBhIHdoaWxlIGRlbGF5IGlzIG1hbmRhdG9yeSByZXF1aXJlZCBhZnRlciBwY2llX3JlZl9jbGtf ZW4gaXMgc2V0Lg0KPiA+PiBPdGhlcndpc2UsIHRoZSBzeXN0ZW0gd291bGQgYmUgaGFuZyBvbiBp bXg2cWRsIGFyZCBib2FyZHMsIGJlY2F1c2UNCj4gPj4gdGhhdCBpbXg2cWRsIGJvYXJkcyBkb24n dCBoYXZlIHRoZSByZXNldF9ncGlvLg0KPiA+PiAtIHRoZSBjbG9ja3Mgc2hvdWxkIGJlIHN0YWJs ZSBhbHJlYWR5IGFmdGVyIHRoZSAiY2xrX3ByZXBhcmVfZW5hYmxlIg0KPiA+PiBpcyByZXR1cm4u IFNvIEkgdGhpbmsgaXQncyBvayB0byBtb3ZlIHRoZSB1c2xlZXAgZGVsYXkgYWZ0ZXIgdGhlDQo+ ID4+IHBjaWVfcmVmX2VuIGlzIHNldC4NCj4gPj4NCj4gPg0KPiA+IFlvdSBhcmUgZGVzY3JpYmlu ZyBhIGxvdCBvZiB0aGUgY29uZGl0aW9ucyBhcm91bmQgdGhlIGlzc3VlLCBidXQgbm90DQo+ID4g dGhlIGlzc3VlIGl0c2VsZiwgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byBmb2xsb3cgeW91ciBjb21t aXQgbWVzc2FnZS4NCj4gPiBBZnRlciBsb29raW5nIGF0IHRoZSBjb2RlIEkgdGhpbmsgdGhlIHBy b2JsZW0gaXMgdGhpcyAoYW5kIHNob3VsZCBiZQ0KPiA+IGRlc2NyaWJlZA0KPiA+IGFjY29yZGlu Z2x5KToNCj4gPg0KPiA+IEZvciBib2FyZHMgd2l0aG91dCBhIHJlc2V0IGdwaW8gd2Ugc2tpcCB0 aGUgZGVsYXkgYmV0d2VlbiBlbmFibGluZyB0aGUNCj4gPiBwY2llX3JlZl9jbGsgYW5kIHRvdWNo aW5nIHRoZSBSQyByZWdpc3RlcnMgZm9yIGNvbmZpZ3VyYXRpb24uDQo+ID4gQXBwYXJlbnRseSB0 aGlzIGhhbmdzIHdoZW4gdGhlIGNsb2NrcyBhcmUgbm90IHlldCBzZXR0bGVkIGluIHRoZSBEVw0K PiA+IFBDSWUgY29yZS4gU28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBhbHdh eXMgYW4gYXBwcm9wcmlhdGUNCj4gPiBkZWxheSBiZXR3ZWVuIHRob3NlIHR3byBhY3Rpb25zLg0K W1JpY2hhcmRdIFRoYW5rcy4NCj4gPg0KPiA+IEkgaGF2ZSBub3QgZm91bmQgdGhpcyBjb25zdHJh aW50IGFueXdoZXJlIGluIHRoZSBpLk1YNiBSZWZlcmVuY2UNCj4gPiBNYW51YWwsIG5vciBpbiB0 aGUgRFcgUENJZSBkb2N1bWVudHMgSSBoYXZlIGFjY2VzcyB0bywgd2hpY2ggbWFrZXMgbWUNCj4g PiBhIGJpdCBmZWVsIGEgYml0IHVuaGFwcHkgYWJvdXQgdGhpcy4gUmljaGFyZCwgZG8geW91IGhh dmUgYmV0dGVyIGluZm8NCj4gPiBvbiB3aHkgdGhpcyBkZWxheSBpcyBuZWVkZWQgYW5kIGhvdyBs b25nIGl0IG5lZWRzIHRvIGJlPyBPciBpcyB0aGlzIGp1c3QNCj4gZW1waXJpY2FsPw0KW1JpY2hh cmRdIEkgdXNlZCB0byBmaXggb25lIGxlc3MgdGhhbiAwLjMlIHBlcmNlbnRhZ2UgcmFuZG9tbHkg bGluayBkb3duIGlzc3VlDQpkdXJpbmcgdGhlIHdhcm0tcmVzZXQgbG9vcCBzdHJlc3MgdGVzdHMu DQpJIHVzZWQgZ2V0IHNvbWUgaW5mbyBmcm9tIGRlc2lnbiB0ZWFtIHRoYXQgIiB0aGUgYXN5bmMg cmVzZXQgaW5wdXQgbmVlZCByZWYgY2xvY2sgdG8gc3luYyBpbnRlcm5hbGx5LCB3aGVuIHRoZSBy ZWYgY2xvY2sgY29tZXMgYWZ0ZXIgcmVzZXQsIGludGVybmFsIHN5bmNlZCByZXNldCB0aW1lIGlz IHRvbyBzaG9ydCAsIGNhbm5vdCBtZWV0IHRoZSByZXF1aXJlbWVudC4iICJhdCBsZWFzdCA0dXMg ZGVsYXkgaXMgcmVxdWlyZWQgYWZ0ZXIgcmVmIGNsb2NrIHN0YWJsZSBhbmQgYmVmb3JlIHNzcF9l biBpcyBhc3NlcnQiDQpJIHdvdWxkIGFkZCBhYm91dCAxMHVzIGRlbGF5IGp1c3QgYmV0d2VlbiBj bG9ja3MgYXJlIHN0YWJsZSBhbmQgc3NwX2VuIGlzIGFzc2VydCBsYXRlci4NCj4gPg0KPiA+IElu IGdlbmVyYWwgSSdtIG9rIHdpdGggdGhpcyBwYXRjaCwgYnV0IHN0aWxsIHdhbnQgYSBjb25maXJt YXRpb24gZnJvbQ0KPiA+IFRpbSB0aGF0IHRoaXMgZG9lc24ndCBicmVhayBhbnl0aGluZy4NCj4g DQo+IEkgYWdyZWUgd2l0aCBMdWNhcycgY29tbWVudHMgYW5kIGFsc28gYWdyZWUgdGhhdCB0aGlz IGNhbiB1c2Ugc29tZSB0ZXN0aW5nLg0KPiBCYXNlZCBvbiBteSBwcmV2aW91cyBmaW5kaW5ncyBQ Q0kgbGluayBpcyB2ZXJ5IGZyYWdpbGUuIEl0IHdpbGwgdGFrZSBtZSBhIGZldw0KPiBkYXlzIHRv IGdldCBhIHByb3BlciB0ZXN0IHNldHVwIGluIGEgdGhlcm1hbCBjaGFtYmVyIHdpdGggYSBob3N0 IG9mIGJvYXJkcyBidXQNCj4gSSB3aWxsIHJlcG9ydCBiYWNrIHdoZW4gSSBoYXZlIGZpbmRpbmdz Lg0KPiANCj4gVGltDQo+IA0KDQoNCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg0KPiA+DQo+ ID4+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNvbT4NCj4g Pj4gLS0tDQo+ID4+ICBkcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMgfCA2ICsrKy0tLQ0KPiA+ PiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCj4gPj4N Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYw0KPiA+PiBiL2Ry aXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYyBpbmRleCAyMzNmZThhLi5iYzQyMjJiIDEwMDY0NA0K PiA+PiAtLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMNCj4gPj4gKysrIGIvZHJpdmVy cy9wY2kvaG9zdC9wY2ktaW14Ni5jDQo+ID4+IEBAIC0yNzUsMTUgKzI3NSwxNSBAQCBzdGF0aWMg aW50IGlteDZfcGNpZV9kZWFzc2VydF9jb3JlX3Jlc2V0KHN0cnVjdA0KPiBwY2llX3BvcnQgKnBw KQ0KPiA+PiAgICAgICAgICAgICAgIGdvdG8gZXJyX3BjaWU7DQo+ID4+ICAgICAgIH0NCj4gPj4N Cj4gPj4gLSAgICAgLyogYWxsb3cgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUgKi8NCj4gPj4gLSAg ICAgdXNsZWVwX3JhbmdlKDIwMCwgNTAwKTsNCj4gPj4gLQ0KPiA+PiAgICAgICAvKiBwb3dlciB1 cCBjb3JlIHBoeSBhbmQgZW5hYmxlIHJlZiBjbG9jayAqLw0KPiA+PiAgICAgICByZWdtYXBfdXBk YXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMSwNCj4gPj4gICAgICAg ICAgICAgICAgICAgICAgIElNWDZRX0dQUjFfUENJRV9URVNUX1BELCAwIDw8IDE4KTsNCj4gPj4g ICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQ UjEsDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19F TiwgMSA8PCAxNik7DQo+ID4+DQo+ID4+ICsgICAgIC8qIGFsbG93IHRoZSBjbG9ja3MgdG8gc3Rh YmlsaXplICovDQo+ID4+ICsgICAgIHVzbGVlcF9yYW5nZSgyMDAsIDUwMCk7DQo+ID4+ICsNCj4g Pj4gICAgICAgLyogU29tZSBib2FyZHMgZG9uJ3QgaGF2ZSBQQ0llIHJlc2V0IEdQSU8uICovDQo+ ID4+ICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+cmVzZXRfZ3BpbykpIHsNCj4g Pj4gICAgICAgICAgICAgICBncGlvX3NldF92YWx1ZShpbXg2X3BjaWUtPnJlc2V0X2dwaW8sIDAp Ow0KPiA+DQo+ID4gLS0NCj4gPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMg U3RhY2ggICAgICAgICAgICAgICAgIHwNCj4gPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAg IHwgaHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwNCj4gPg0KPiA+IC0tDQo+ID4gVG8gdW5z dWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4 LXBjaSINCj4gPiBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2Vy bmVsLm9yZyBNb3JlIG1ham9yZG9tbw0KPiA+IGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5v cmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 12:28 ` Tim Harvey 2014-09-25 5:21 ` Hong-Xing.Zhu @ 2014-10-01 18:00 ` Tim Harvey 2014-10-02 2:26 ` Hong-Xing.Zhu 1 sibling, 1 reply; 31+ messages in thread From: Tim Harvey @ 2014-10-01 18:00 UTC (permalink / raw) To: Lucas Stach, Richard Zhu Cc: linux-pci-owner, linux-pci@vger.kernel.org, Shawn Guo, Fabio Estevam On Tue, Sep 23, 2014 at 5:28 AM, Tim Harvey <tharvey@gateworks.com> wrote: > On Tue, Sep 23, 2014 at 2:56 AM, Lucas Stach <l.stach@pengutronix.de> wrote: >> Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: >>> - a while delay is mandatory required after pcie_ref_clk_en >>> is set. Otherwise, the system would be hang on imx6qdl ard >>> boards, because that imx6qdl boards don't have the reset_gpio. >>> - the clocks should be stable already after the >>> "clk_prepare_enable" is return. So I think it's ok to move the >>> usleep delay after the pcie_ref_en is set. >>> >> >> You are describing a lot of the conditions around the issue, but not the >> issue itself, which makes it hard to follow your commit message. After >> looking at the code I think the problem is this (and should be described >> accordingly): >> >> For boards without a reset gpio we skip the delay between enabling the >> pcie_ref_clk and touching the RC registers for configuration. Apparently >> this hangs when the clocks are not yet settled in the DW PCIe core. So >> we need to make sure that there is always an appropriate delay between >> those two actions. >> >> I have not found this constraint anywhere in the i.MX6 Reference Manual, >> nor in the DW PCIe documents I have access to, which makes me a bit feel >> a bit unhappy about this. Richard, do you have better info on why this >> delay is needed and how long it needs to be? Or is this just empirical? >> >> In general I'm ok with this patch, but still want a confirmation from >> Tim that this doesn't break anything. > > I agree with Lucas' comments and also agree that this can use some > testing. Based on my previous findings PCI link is very fragile. It > will take me a few days to get a proper test setup in a thermal > chamber with a host of boards but I will report back when I have > findings. > > Tim > >> >>> Signed-off-by: Richard Zhu <r65037@freescale.com> >>> --- >>> drivers/pci/host/pci-imx6.c | 6 +++--- >>> 1 file changed, 3 insertions(+), 3 deletions(-) >>> >>> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c >>> index 233fe8a..bc4222b 100644 >>> --- a/drivers/pci/host/pci-imx6.c >>> +++ b/drivers/pci/host/pci-imx6.c >>> @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) >>> goto err_pcie; >>> } >>> >>> - /* allow the clocks to stabilize */ >>> - usleep_range(200, 500); >>> - >>> /* power up core phy and enable ref clock */ >>> regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, >>> IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); >>> regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, >>> IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); >>> >>> + /* allow the clocks to stabilize */ >>> + usleep_range(200, 500); >>> + >>> /* Some boards don't have PCIe reset GPIO. */ >>> if (gpio_is_valid(imx6_pcie->reset_gpio)) { >>> gpio_set_value(imx6_pcie->reset_gpio, 0); >> I tested this across temperature over 300+ boots each on several IMX6 based boards with switches and did not encounter any link failures. Tested-by: Tim Harvey <tharvey@gateworks.com> ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-10-01 18:00 ` Tim Harvey @ 2014-10-02 2:26 ` Hong-Xing.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-10-02 2:26 UTC (permalink / raw) To: Tim Harvey Cc: Lucas Stach, Hong-Xing.Zhu@freescale.com, linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Fabio Estevam VGhhbmtzIFRpbS4NCg0KQmVzdCByZWdhcmRzDQpSaWNoYXJkDQoNCj4g1NogMjAxNMTqMTDUwjLI 1aOsyc/O5zI6MDCjrCJUaW0gSGFydmV5IiA8dGhhcnZleUBnYXRld29ya3MuY29tPiDQtLXAo7oN Cj4gDQo+PiBPbiBUdWUsIFNlcCAyMywgMjAxNCBhdCA1OjI4IEFNLCBUaW0gSGFydmV5IDx0aGFy dmV5QGdhdGV3b3Jrcy5jb20+IHdyb3RlOg0KPj4+IE9uIFR1ZSwgU2VwIDIzLCAyMDE0IGF0IDI6 NTYgQU0sIEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPiB3cm90ZToNCj4+PiBB bSBEaWVuc3RhZywgZGVuIDIzLjA5LjIwMTQsIDEyOjExICswODAwIHNjaHJpZWIgUmljaGFyZCBa aHU6DQo+Pj4+IC0gYSB3aGlsZSBkZWxheSBpcyBtYW5kYXRvcnkgcmVxdWlyZWQgYWZ0ZXIgcGNp ZV9yZWZfY2xrX2VuDQo+Pj4+IGlzIHNldC4gT3RoZXJ3aXNlLCB0aGUgc3lzdGVtIHdvdWxkIGJl IGhhbmcgb24gaW14NnFkbCBhcmQNCj4+Pj4gYm9hcmRzLCBiZWNhdXNlIHRoYXQgaW14NnFkbCBi b2FyZHMgZG9uJ3QgaGF2ZSB0aGUgcmVzZXRfZ3Bpby4NCj4+Pj4gLSB0aGUgY2xvY2tzIHNob3Vs ZCBiZSBzdGFibGUgYWxyZWFkeSBhZnRlciB0aGUNCj4+Pj4gImNsa19wcmVwYXJlX2VuYWJsZSIg aXMgcmV0dXJuLiBTbyBJIHRoaW5rIGl0J3Mgb2sgdG8gbW92ZSB0aGUNCj4+Pj4gdXNsZWVwIGRl bGF5IGFmdGVyIHRoZSBwY2llX3JlZl9lbiBpcyBzZXQuDQo+Pj4gDQo+Pj4gWW91IGFyZSBkZXNj cmliaW5nIGEgbG90IG9mIHRoZSBjb25kaXRpb25zIGFyb3VuZCB0aGUgaXNzdWUsIGJ1dCBub3Qg dGhlDQo+Pj4gaXNzdWUgaXRzZWxmLCB3aGljaCBtYWtlcyBpdCBoYXJkIHRvIGZvbGxvdyB5b3Vy IGNvbW1pdCBtZXNzYWdlLiBBZnRlcg0KPj4+IGxvb2tpbmcgYXQgdGhlIGNvZGUgSSB0aGluayB0 aGUgcHJvYmxlbSBpcyB0aGlzIChhbmQgc2hvdWxkIGJlIGRlc2NyaWJlZA0KPj4+IGFjY29yZGlu Z2x5KToNCj4+PiANCj4+PiBGb3IgYm9hcmRzIHdpdGhvdXQgYSByZXNldCBncGlvIHdlIHNraXAg dGhlIGRlbGF5IGJldHdlZW4gZW5hYmxpbmcgdGhlDQo+Pj4gcGNpZV9yZWZfY2xrIGFuZCB0b3Vj aGluZyB0aGUgUkMgcmVnaXN0ZXJzIGZvciBjb25maWd1cmF0aW9uLiBBcHBhcmVudGx5DQo+Pj4g dGhpcyBoYW5ncyB3aGVuIHRoZSBjbG9ja3MgYXJlIG5vdCB5ZXQgc2V0dGxlZCBpbiB0aGUgRFcg UENJZSBjb3JlLiBTbw0KPj4+IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYWx3 YXlzIGFuIGFwcHJvcHJpYXRlIGRlbGF5IGJldHdlZW4NCj4+PiB0aG9zZSB0d28gYWN0aW9ucy4N Cj4+PiANCj4+PiBJIGhhdmUgbm90IGZvdW5kIHRoaXMgY29uc3RyYWludCBhbnl3aGVyZSBpbiB0 aGUgaS5NWDYgUmVmZXJlbmNlIE1hbnVhbCwNCj4+PiBub3IgaW4gdGhlIERXIFBDSWUgZG9jdW1l bnRzIEkgaGF2ZSBhY2Nlc3MgdG8sIHdoaWNoIG1ha2VzIG1lIGEgYml0IGZlZWwNCj4+PiBhIGJp dCB1bmhhcHB5IGFib3V0IHRoaXMuIFJpY2hhcmQsIGRvIHlvdSBoYXZlIGJldHRlciBpbmZvIG9u IHdoeSB0aGlzDQo+Pj4gZGVsYXkgaXMgbmVlZGVkIGFuZCBob3cgbG9uZyBpdCBuZWVkcyB0byBi ZT8gT3IgaXMgdGhpcyBqdXN0IGVtcGlyaWNhbD8NCj4+PiANCj4+PiBJbiBnZW5lcmFsIEknbSBv ayB3aXRoIHRoaXMgcGF0Y2gsIGJ1dCBzdGlsbCB3YW50IGEgY29uZmlybWF0aW9uIGZyb20NCj4+ PiBUaW0gdGhhdCB0aGlzIGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcuDQo+PiANCj4+IEkgYWdyZWUg d2l0aCBMdWNhcycgY29tbWVudHMgYW5kIGFsc28gYWdyZWUgdGhhdCB0aGlzIGNhbiB1c2Ugc29t ZQ0KPj4gdGVzdGluZy4gQmFzZWQgb24gbXkgcHJldmlvdXMgZmluZGluZ3MgUENJIGxpbmsgaXMg dmVyeSBmcmFnaWxlLiBJdA0KPj4gd2lsbCB0YWtlIG1lIGEgZmV3IGRheXMgdG8gZ2V0IGEgcHJv cGVyIHRlc3Qgc2V0dXAgaW4gYSB0aGVybWFsDQo+PiBjaGFtYmVyIHdpdGggYSBob3N0IG9mIGJv YXJkcyBidXQgSSB3aWxsIHJlcG9ydCBiYWNrIHdoZW4gSSBoYXZlDQo+PiBmaW5kaW5ncy4NCj4+ IA0KPj4gVGltDQo+PiANCj4+PiANCj4+Pj4gU2lnbmVkLW9mZi1ieTogUmljaGFyZCBaaHUgPHI2 NTAzN0BmcmVlc2NhbGUuY29tPg0KPj4+PiAtLS0NCj4+Pj4gZHJpdmVycy9wY2kvaG9zdC9wY2kt aW14Ni5jIHwgNiArKystLS0NCj4+Pj4gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg MyBkZWxldGlvbnMoLSkNCj4+Pj4gDQo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0 L3BjaS1pbXg2LmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMNCj4+Pj4gaW5kZXggMjMz ZmU4YS4uYmM0MjIyYiAxMDA2NDQNCj4+Pj4gLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14 Ni5jDQo+Pj4+ICsrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYw0KPj4+PiBAQCAtMjc1 LDE1ICsyNzUsMTUgQEAgc3RhdGljIGludCBpbXg2X3BjaWVfZGVhc3NlcnRfY29yZV9yZXNldChz dHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4+Pj4gICAgICAgICAgICAgIGdvdG8gZXJyX3BjaWU7DQo+ Pj4+ICAgICAgfQ0KPj4+PiANCj4+Pj4gLSAgICAgLyogYWxsb3cgdGhlIGNsb2NrcyB0byBzdGFi aWxpemUgKi8NCj4+Pj4gLSAgICAgdXNsZWVwX3JhbmdlKDIwMCwgNTAwKTsNCj4+Pj4gLQ0KPj4+ PiAgICAgIC8qIHBvd2VyIHVwIGNvcmUgcGh5IGFuZCBlbmFibGUgcmVmIGNsb2NrICovDQo+Pj4+ ICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQ UjEsDQo+Pj4+ICAgICAgICAgICAgICAgICAgICAgIElNWDZRX0dQUjFfUENJRV9URVNUX1BELCAw IDw8IDE4KTsNCj4+Pj4gICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNf Z3ByLCBJT01VWENfR1BSMSwNCj4+Pj4gICAgICAgICAgICAgICAgICAgICAgSU1YNlFfR1BSMV9Q Q0lFX1JFRl9DTEtfRU4sIDEgPDwgMTYpOw0KPj4+PiANCj4+Pj4gKyAgICAgLyogYWxsb3cgdGhl IGNsb2NrcyB0byBzdGFiaWxpemUgKi8NCj4+Pj4gKyAgICAgdXNsZWVwX3JhbmdlKDIwMCwgNTAw KTsNCj4+Pj4gKw0KPj4+PiAgICAgIC8qIFNvbWUgYm9hcmRzIGRvbid0IGhhdmUgUENJZSByZXNl dCBHUElPLiAqLw0KPj4+PiAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+cmVzZXRf Z3BpbykpIHsNCj4+Pj4gICAgICAgICAgICAgIGdwaW9fc2V0X3ZhbHVlKGlteDZfcGNpZS0+cmVz ZXRfZ3BpbywgMCk7DQo+IA0KPiBJIHRlc3RlZCB0aGlzIGFjcm9zcyB0ZW1wZXJhdHVyZSBvdmVy IDMwMCsgYm9vdHMgZWFjaCBvbiBzZXZlcmFsIElNWDYNCj4gYmFzZWQgYm9hcmRzIHdpdGggc3dp dGNoZXMgYW5kIGRpZCBub3QgZW5jb3VudGVyIGFueSBsaW5rIGZhaWx1cmVzLg0KPiANCj4gVGVz dGVkLWJ5OiBUaW0gSGFydmV5IDx0aGFydmV5QGdhdGV3b3Jrcy5jb20+DQo= ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu 2014-09-23 9:56 ` Lucas Stach @ 2014-09-23 12:45 ` Fabio Estevam 2014-10-24 1:51 ` Fabio Estevam 2 siblings, 0 replies; 31+ messages in thread From: Fabio Estevam @ 2014-09-23 12:45 UTC (permalink / raw) To: Richard Zhu Cc: linux-pci-owner, linux-pci@vger.kernel.org, Shawn Guo, Lucas Stach, Tim Harvey On Tue, Sep 23, 2014 at 1:11 AM, Richard Zhu <r65037@freescale.com> wrote: > - a while delay is mandatory required after pcie_ref_clk_en > is set. Otherwise, the system would be hang on imx6qdl ard > boards, because that imx6qdl boards don't have the reset_gpio. The mx6qdl sabreauto boards do have PCI reset pins. They come from the I2C MAX7310 expander. Yes, there are boards that do not have PCI reset GPIO, but this commit log need to be rewritten. ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-09-23 4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu 2014-09-23 9:56 ` Lucas Stach 2014-09-23 12:45 ` Fabio Estevam @ 2014-10-24 1:51 ` Fabio Estevam 2014-10-24 2:46 ` Richard.Zhu 2 siblings, 1 reply; 31+ messages in thread From: Fabio Estevam @ 2014-10-24 1:51 UTC (permalink / raw) To: Richard Zhu Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shawn Guo, Lucas Stach, Tim Harvey, Bjorn Helgaas Hi Richard, On Tue, Sep 23, 2014 at 1:11 AM, Richard Zhu <r65037@freescale.com> wrote: > - a while delay is mandatory required after pcie_ref_clk_en > is set. Otherwise, the system would be hang on imx6qdl ard > boards, because that imx6qdl boards don't have the reset_gpio. > - the clocks should be stable already after the > "clk_prepare_enable" is return. So I think it's ok to move the > usleep delay after the pcie_ref_en is set. > > Signed-off-by: Richard Zhu <r65037@freescale.com> Tested-by: Fabio Estevam <fabio.estevam@freescale.com> Without this patch we notice that the kernel does not boot anymore since commit 3fce0e882f61 (PCI: imx6: Delay enabling reference clock for SS until it stabilizes) on a system that does not pass the PCI gpio reset in the dtb. This causes a regression on mx6 nitrogen boards. I would suggest that you resend this patch only so that it could be applied into 3.18 as a bug fix. ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en 2014-10-24 1:51 ` Fabio Estevam @ 2014-10-24 2:46 ` Richard.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Richard.Zhu @ 2014-10-24 2:46 UTC (permalink / raw) To: Fabio Estevam Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, Lucas Stach, Tim Harvey, Bjorn Helgaas DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEZhYmlvIEVzdGV2YW0gW21h aWx0bzpmZXN0ZXZhbUBnbWFpbC5jb21dDQo+IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAyNCwgMjAx NCA5OjUxIEFNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6IGxpbnV4LXBjaS1vd25l ckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IEd1byBTaGF3bi0N Cj4gUjY1MDczOyBMdWNhcyBTdGFjaDsgVGltIEhhcnZleTsgQmpvcm4gSGVsZ2Fhcw0KPiBTdWJq ZWN0OiBSZTogW1BBVENIIHYyIDIvNV0gUENJOiBpbXg2OiB3YWl0IHRoZSBjbG9ja3MgdG8gc3Rh YmlsaXplIGFmdGVyDQo+IHJlZl9lbg0KPiANCj4gSGkgUmljaGFyZCwNCj4gDQo+IE9uIFR1ZSwg U2VwIDIzLCAyMDE0IGF0IDE6MTEgQU0sIFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNv bT4gd3JvdGU6DQo+ID4gLSBhIHdoaWxlIGRlbGF5IGlzIG1hbmRhdG9yeSByZXF1aXJlZCBhZnRl ciBwY2llX3JlZl9jbGtfZW4gaXMgc2V0Lg0KPiA+IE90aGVyd2lzZSwgdGhlIHN5c3RlbSB3b3Vs ZCBiZSBoYW5nIG9uIGlteDZxZGwgYXJkIGJvYXJkcywgYmVjYXVzZQ0KPiA+IHRoYXQgaW14NnFk bCBib2FyZHMgZG9uJ3QgaGF2ZSB0aGUgcmVzZXRfZ3Bpby4NCj4gPiAtIHRoZSBjbG9ja3Mgc2hv dWxkIGJlIHN0YWJsZSBhbHJlYWR5IGFmdGVyIHRoZSAiY2xrX3ByZXBhcmVfZW5hYmxlIg0KPiA+ IGlzIHJldHVybi4gU28gSSB0aGluayBpdCdzIG9rIHRvIG1vdmUgdGhlIHVzbGVlcCBkZWxheSBh ZnRlciB0aGUNCj4gPiBwY2llX3JlZl9lbiBpcyBzZXQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5 OiBSaWNoYXJkIFpodSA8cjY1MDM3QGZyZWVzY2FsZS5jb20+DQo+IA0KPiBUZXN0ZWQtYnk6IEZh YmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4NCj4gDQo+IFdpdGhvdXQg dGhpcyBwYXRjaCB3ZSBub3RpY2UgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IGJvb3QgYW55bW9y ZSBzaW5jZQ0KPiBjb21taXQgIDNmY2UwZTg4MmY2MSAoUENJOiBpbXg2OiBEZWxheSBlbmFibGlu ZyByZWZlcmVuY2UgY2xvY2sgZm9yIFNTIHVudGlsDQo+IGl0IHN0YWJpbGl6ZXMpIG9uIGEgc3lz dGVtIHRoYXQgZG9lcyBub3QgcGFzcyB0aGUgUENJIGdwaW8gcmVzZXQgaW4gdGhlIGR0Yi4NCj4g VGhpcyBjYXVzZXMgYSByZWdyZXNzaW9uIG9uIG14NiBuaXRyb2dlbiBib2FyZHMuDQo+IA0KPiBJ IHdvdWxkIHN1Z2dlc3QgdGhhdCB5b3UgcmVzZW5kIHRoaXMgcGF0Y2ggb25seSBzbyB0aGF0IGl0 IGNvdWxkIGJlIGFwcGxpZWQNCj4gaW50byAzLjE4IGFzIGEgYnVnIGZpeC4NCg0KDQpPa2F5LCBJ IHdvdWxkIHNlbmQgb3V0IHRoZSBwYXRjaCB0b2RheS4NCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJk IFpodQ0K ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu 2014-09-23 4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu 2014-09-23 4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu @ 2014-09-23 4:11 ` Richard Zhu 2014-09-23 10:19 ` Lucas Stach 2014-09-23 4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu ` (2 subsequent siblings) 5 siblings, 1 reply; 31+ messages in thread From: Richard Zhu @ 2014-09-23 4:11 UTC (permalink / raw) To: linux-pci-owner Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu - imx6sx pcie has its own power regulator. add the pcie power suppy into dts and binding. - enable pcie on imx6sx soc. Signed-off-by: Richard Zhu <r65037@freescale.com> --- .../devicetree/bindings/pci/fsl,imx6q-pcie.txt | 4 ++- arch/arm/boot/dts/imx6sx-sdb.dts | 13 +++++++++ arch/arm/boot/dts/imx6sx.dtsi | 33 +++++++++++++--------- arch/arm/mach-imx/Kconfig | 1 + 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt index 9455fd0..d3b5704 100644 --- a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt +++ b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt @@ -4,7 +4,7 @@ This PCIe host controller is based on the Synopsis Designware PCIe IP and thus inherits all the common properties defined in designware-pcie.txt. Required properties: -- compatible: "fsl,imx6q-pcie" +- compatible: "fsl,imx6q-pcie", "fsl,imx6sx-pcie" - reg: base addresse and length of the pcie controller - interrupts: A list of interrupt outputs of the controller. Must contain an entry for each entry in the interrupt-names property. @@ -12,6 +12,7 @@ Required properties: - "msi": The interrupt that is asserted when an MSI is received - clock-names: Must include the following additional entries: - "pcie_phy" +- regulator: regulator used by imx6sx pcie module. Example: @@ -35,4 +36,5 @@ Example: <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks 144>, <&clks 206>, <&clks 189>; clock-names = "pcie", "pcie_bus", "pcie_phy"; + pcie-supply = <®_pcie>; }; diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts b/arch/arm/boot/dts/imx6sx-sdb.dts index a3980d9..2976913 100644 --- a/arch/arm/boot/dts/imx6sx-sdb.dts +++ b/arch/arm/boot/dts/imx6sx-sdb.dts @@ -251,6 +251,13 @@ }; }; +&pcie { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_pcie>; + reset-gpio = <&gpio2 0 0>; + status = "okay"; +}; + &ssi2 { status = "okay"; }; @@ -365,6 +372,12 @@ >; }; + pinctrl_pcie: pciegrp { + fsl,pins = < + MX6SX_PAD_ENET1_COL__GPIO2_IO_0 0x17059 + >; + }; + pinctrl_vcc_sd3: vccsd3grp { fsl,pins = < MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059 diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi index f4b9da6..4911160 100644 --- a/arch/arm/boot/dts/imx6sx.dtsi +++ b/arch/arm/boot/dts/imx6sx.dtsi @@ -689,9 +689,11 @@ }; gpc: gpc@020dc000 { - compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc"; + compatible = "fsl,imx6sx-gpc", + "fsl,imx6q-gpc", "syscon"; reg = <0x020dc000 0x4000>; interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; + pcie-supply = <®_pcie>; }; iomuxc: iomuxc@020e0000 { @@ -1188,20 +1190,23 @@ #address-cells = <3>; #size-cells = <2>; device_type = "pci"; - /* configuration space */ - ranges = <0x00000800 0 0x08f00000 0x08f00000 0 0x00080000 - /* downstream I/O */ - 0x81000000 0 0 0x08f80000 0 0x00010000 - /* non-prefetchable memory */ - 0x82000000 0 0x08000000 0x08000000 0 0x00f00000>; + ranges = <0x00000800 0 0x01f00000 0x08f00000 0 0x00080000 /* configuration space */ + 0x81000000 0 0 0x08f80000 0 0x00010000 /* downstream I/O */ + 0x82000000 0 0x01000000 0x08000000 0 0x00f00000>; /* non-prefetchable memory */ num-lanes = <1>; - interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>; - clocks = <&clks IMX6SX_CLK_PCIE_REF_125M>, - <&clks IMX6SX_CLK_PCIE_AXI>, - <&clks IMX6SX_CLK_LVDS1_OUT>, - <&clks IMX6SX_CLK_DISPLAY_AXI>; - clock-names = "pcie_ref_125m", "pcie_axi", - "lvds_gate", "display_axi"; + interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "msi"; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX6SX_CLK_PCIE_AXI>, + <&clks IMX6SX_CLK_DISPLAY_AXI>, + <&clks IMX6SX_CLK_LVDS1_OUT>; + clock-names = "pcie", "pcie_phy", "pcie_bus"; + pcie-supply = <®_pcie>; status = "disabled"; }; }; diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index be9a51a..0a055f0 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -718,6 +718,7 @@ config SOC_IMX6SL config SOC_IMX6SX bool "i.MX6 SoloX support" + select PCI_DOMAINS if PCI select PINCTRL_IMX6SX select SOC_IMX6 -- 1.9.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie 2014-09-23 4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu @ 2014-09-23 10:19 ` Lucas Stach 2014-09-24 9:43 ` Hong-Xing.Zhu 0 siblings, 1 reply; 31+ messages in thread From: Lucas Stach @ 2014-09-23 10:19 UTC (permalink / raw) To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: > - imx6sx pcie has its own power regulator. > add the pcie power suppy into dts and binding. > - enable pcie on imx6sx soc. > > Signed-off-by: Richard Zhu <r65037@freescale.com> > --- > .../devicetree/bindings/pci/fsl,imx6q-pcie.txt | 4 ++- > arch/arm/boot/dts/imx6sx-sdb.dts | 13 +++++++++ > arch/arm/boot/dts/imx6sx.dtsi | 33 +++++++++++++--------- > arch/arm/mach-imx/Kconfig | 1 + > 4 files changed, 36 insertions(+), 15 deletions(-) > > diff --git a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt > index 9455fd0..d3b5704 100644 > --- a/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt > +++ b/Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt > @@ -4,7 +4,7 @@ This PCIe host controller is based on the Synopsis Designware PCIe IP > and thus inherits all the common properties defined in designware-pcie.txt. > > Required properties: > -- compatible: "fsl,imx6q-pcie" > +- compatible: "fsl,imx6q-pcie", "fsl,imx6sx-pcie" > - reg: base addresse and length of the pcie controller > - interrupts: A list of interrupt outputs of the controller. Must contain an > entry for each entry in the interrupt-names property. > @@ -12,6 +12,7 @@ Required properties: > - "msi": The interrupt that is asserted when an MSI is received > - clock-names: Must include the following additional entries: > - "pcie_phy" > +- regulator: regulator used by imx6sx pcie module. > There are multiple issues with this line: It should move into it's own section that clearly states that this is a required property only for compatible fsl,imx6sx-pcie. It doesn't mention the actual name of the supply. The name you are using in the example below is too broad: what is this supply used for? Is it feeding the whole PCIe partition, or just the PHY? In either case it should be named something like pcie-core-supply or pcie-phy-supply. We may later add regulators that can be clearly differentiated by their name. > Example: > > @@ -35,4 +36,5 @@ Example: > <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; > clocks = <&clks 144>, <&clks 206>, <&clks 189>; > clock-names = "pcie", "pcie_bus", "pcie_phy"; > + pcie-supply = <®_pcie>; > }; > diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts b/arch/arm/boot/dts/imx6sx-sdb.dts > index a3980d9..2976913 100644 > --- a/arch/arm/boot/dts/imx6sx-sdb.dts > +++ b/arch/arm/boot/dts/imx6sx-sdb.dts > @@ -251,6 +251,13 @@ > }; > }; > > +&pcie { > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_pcie>; > + reset-gpio = <&gpio2 0 0>; > + status = "okay"; > +}; > + This is adding PCIe support to a single board and has nothing to do with the binding. Split out into another patch. > &ssi2 { > status = "okay"; > }; > @@ -365,6 +372,12 @@ > >; > }; > > + pinctrl_pcie: pciegrp { > + fsl,pins = < > + MX6SX_PAD_ENET1_COL__GPIO2_IO_0 0x17059 > + >; > + }; > + > pinctrl_vcc_sd3: vccsd3grp { > fsl,pins = < > MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059 > diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi > index f4b9da6..4911160 100644 > --- a/arch/arm/boot/dts/imx6sx.dtsi > +++ b/arch/arm/boot/dts/imx6sx.dtsi > @@ -689,9 +689,11 @@ > }; > > gpc: gpc@020dc000 { > - compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc"; > + compatible = "fsl,imx6sx-gpc", > + "fsl,imx6q-gpc", "syscon"; This has nothing to do with the imx6sx binding change. Split out into another patch with own justification. > reg = <0x020dc000 0x4000>; > interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; > + pcie-supply = <®_pcie>; This shouldn't be here. > }; > > iomuxc: iomuxc@020e0000 { > @@ -1188,20 +1190,23 @@ > #address-cells = <3>; > #size-cells = <2>; > device_type = "pci"; > - /* configuration space */ > - ranges = <0x00000800 0 0x08f00000 0x08f00000 0 0x00080000 > - /* downstream I/O */ > - 0x81000000 0 0 0x08f80000 0 0x00010000 > - /* non-prefetchable memory */ > - 0x82000000 0 0x08000000 0x08000000 0 0x00f00000>; > + ranges = <0x00000800 0 0x01f00000 0x08f00000 0 0x00080000 /* configuration space */ > + 0x81000000 0 0 0x08f80000 0 0x00010000 /* downstream I/O */ > + 0x82000000 0 0x01000000 0x08000000 0 0x00f00000>; /* non-prefetchable memory */ You are changing the configuration space here. Was it wrong before? If so this needs to be mentioned in the commit message. Also config space assigned in ranges is deprecated. Please add it to the regs property as done on imx6q. > num-lanes = <1>; > - interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>; > - clocks = <&clks IMX6SX_CLK_PCIE_REF_125M>, > - <&clks IMX6SX_CLK_PCIE_AXI>, > - <&clks IMX6SX_CLK_LVDS1_OUT>, > - <&clks IMX6SX_CLK_DISPLAY_AXI>; > - clock-names = "pcie_ref_125m", "pcie_axi", > - "lvds_gate", "display_axi"; > + interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; Again, changing something without mentioning if it was wrong before. > + interrupt-names = "msi"; > + #interrupt-cells = <1>; > + interrupt-map-mask = <0 0 0 0x7>; > + interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&clks IMX6SX_CLK_PCIE_AXI>, > + <&clks IMX6SX_CLK_DISPLAY_AXI>, > + <&clks IMX6SX_CLK_LVDS1_OUT>; > + clock-names = "pcie", "pcie_phy", "pcie_bus"; Is this display_axi clock really feeding the PHY, or is it just a parent of pcie_axi that needs to be enabled for pcie_axi to work? In that case we need to make pcie_phy clock optional for imx6sx and model the relationship between pcie_axi and display_axi in the clock driver. I will not allow the enabling of clocks not directly related to the PCIe core to creep back into this driver. It has cost me quite some time and a binding change to correct this for imx6q. > + pcie-supply = <®_pcie>; > status = "disabled"; > }; > }; > diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig > index be9a51a..0a055f0 100644 > --- a/arch/arm/mach-imx/Kconfig > +++ b/arch/arm/mach-imx/Kconfig > @@ -718,6 +718,7 @@ config SOC_IMX6SL > > config SOC_IMX6SX > bool "i.MX6 SoloX support" > + select PCI_DOMAINS if PCI > select PINCTRL_IMX6SX > select SOC_IMX6 > This change is completely unrelated. Also I don't see why you need this. If you need this for imx6sx please look at the linux-pci ML, Phil Edworthy posted a patch to enable this for all ARM devices and I would like to see your option there. regards, Lucas -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie 2014-09-23 10:19 ` Lucas Stach @ 2014-09-24 9:43 ` Hong-Xing.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-24 9:43 UTC (permalink / raw) To: Lucas Stach Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, festevam@gmail.com, tharvey@gateworks.com DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIz LCAyMDE0IDY6MTkgUE0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNp LW93bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNo YXduLQ0KPiBSNjUwNzM7IGZlc3RldmFtQGdtYWlsLmNvbTsgdGhhcnZleUBnYXRld29ya3MuY29t DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMy81XSBQQ0k6IGlteDY6IHVwZGF0ZSBkdHMgYW5k IGJpbmRpbmcgZm9yIGlteDZzeCBwY2llDQo+IA0KPiBBbSBEaWVuc3RhZywgZGVuIDIzLjA5LjIw MTQsIDEyOjExICswODAwIHNjaHJpZWIgUmljaGFyZCBaaHU6DQo+ID4gLSBpbXg2c3ggcGNpZSBo YXMgaXRzIG93biBwb3dlciByZWd1bGF0b3IuDQo+ID4gYWRkIHRoZSBwY2llIHBvd2VyIHN1cHB5 IGludG8gZHRzIGFuZCBiaW5kaW5nLg0KPiA+IC0gZW5hYmxlIHBjaWUgb24gaW14NnN4IHNvYy4N Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgWmh1IDxyNjUwMzdAZnJlZXNjYWxlLmNv bT4NCj4gPiAtLS0NCj4gPiAgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL2ZzbCxpbXg2cS1w Y2llLnR4dCAgICAgfCAgNCArKy0NCj4gPiAgYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5k dHMgICAgICAgICAgICAgICAgICAgfCAxMyArKysrKysrKysNCj4gPiAgYXJjaC9hcm0vYm9vdC9k dHMvaW14NnN4LmR0c2kgICAgICAgICAgICAgICAgICAgICAgfCAzMyArKysrKysrKysrKysrLS0t LS0tDQo+IC0tLQ0KPiA+ICBhcmNoL2FybS9tYWNoLWlteC9LY29uZmlnICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAxICsNCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCsp LCAxNSBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvcGNpL2ZzbCxpbXg2cS1wY2llLnR4dA0KPiA+IGIvRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9mc2wsaW14NnEtcGNpZS50eHQNCj4gPiBpbmRl eCA5NDU1ZmQwLi5kM2I1NzA0IDEwMDY0NA0KPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy9wY2kvZnNsLGlteDZxLXBjaWUudHh0DQo+ID4gKysrIGIvRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9mc2wsaW14NnEtcGNpZS50eHQNCj4gPiBAQCAt NCw3ICs0LDcgQEAgVGhpcyBQQ0llIGhvc3QgY29udHJvbGxlciBpcyBiYXNlZCBvbiB0aGUgU3lu b3BzaXMNCj4gPiBEZXNpZ253YXJlIFBDSWUgSVAgIGFuZCB0aHVzIGluaGVyaXRzIGFsbCB0aGUg Y29tbW9uIHByb3BlcnRpZXMgZGVmaW5lZCBpbg0KPiBkZXNpZ253YXJlLXBjaWUudHh0Lg0KPiA+ DQo+ID4gIFJlcXVpcmVkIHByb3BlcnRpZXM6DQo+ID4gLS0gY29tcGF0aWJsZTogImZzbCxpbXg2 cS1wY2llIg0KPiA+ICstIGNvbXBhdGlibGU6ICJmc2wsaW14NnEtcGNpZSIsICJmc2wsaW14NnN4 LXBjaWUiDQo+ID4gIC0gcmVnOiBiYXNlIGFkZHJlc3NlIGFuZCBsZW5ndGggb2YgdGhlIHBjaWUg Y29udHJvbGxlcg0KPiA+ICAtIGludGVycnVwdHM6IEEgbGlzdCBvZiBpbnRlcnJ1cHQgb3V0cHV0 cyBvZiB0aGUgY29udHJvbGxlci4gTXVzdCBjb250YWluDQo+IGFuDQo+ID4gICAgZW50cnkgZm9y IGVhY2ggZW50cnkgaW4gdGhlIGludGVycnVwdC1uYW1lcyBwcm9wZXJ0eS4NCj4gPiBAQCAtMTIs NiArMTIsNyBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzOg0KPiA+ICAJLSAibXNpIjogVGhlIGludGVy cnVwdCB0aGF0IGlzIGFzc2VydGVkIHdoZW4gYW4gTVNJIGlzIHJlY2VpdmVkDQo+ID4gIC0gY2xv Y2stbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZW50cmllczoN Cj4gPiAgCS0gInBjaWVfcGh5Ig0KPiA+ICstIHJlZ3VsYXRvcjogcmVndWxhdG9yIHVzZWQgYnkg aW14NnN4IHBjaWUgbW9kdWxlLg0KPiA+DQo+IA0KPiBUaGVyZSBhcmUgbXVsdGlwbGUgaXNzdWVz IHdpdGggdGhpcyBsaW5lOg0KPiBJdCBzaG91bGQgbW92ZSBpbnRvIGl0J3Mgb3duIHNlY3Rpb24g dGhhdCBjbGVhcmx5IHN0YXRlcyB0aGF0IHRoaXMgaXMgYQ0KPiByZXF1aXJlZCBwcm9wZXJ0eSBv bmx5IGZvciBjb21wYXRpYmxlIGZzbCxpbXg2c3gtcGNpZS4NCj4gSXQgZG9lc24ndCBtZW50aW9u IHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgc3VwcGx5Lg0KPiBUaGUgbmFtZSB5b3UgYXJlIHVzaW5n IGluIHRoZSBleGFtcGxlIGJlbG93IGlzIHRvbyBicm9hZDogd2hhdCBpcyB0aGlzIHN1cHBseQ0K PiB1c2VkIGZvcj8gSXMgaXQgZmVlZGluZyB0aGUgd2hvbGUgUENJZSBwYXJ0aXRpb24sIG9yIGp1 c3QgdGhlIFBIWT8gSW4gZWl0aGVyDQo+IGNhc2UgaXQgc2hvdWxkIGJlIG5hbWVkIHNvbWV0aGlu ZyBsaWtlIHBjaWUtY29yZS1zdXBwbHkgb3IgcGNpZS1waHktc3VwcGx5LiBXZQ0KPiBtYXkgbGF0 ZXIgYWRkIHJlZ3VsYXRvcnMgdGhhdCBjYW4gYmUgY2xlYXJseSBkaWZmZXJlbnRpYXRlZCBieSB0 aGVpciBuYW1lLg0KPiANCltSaWNoYXJkXXBjaWUtcGh5LXN1cHBseSBwcm9wZXJ0eSBpcyBtb3Zl ZCBpbnRvICJQb3dlciBzdXBwbGllcyBmb3IgaW14NnN4OiIgc2VjdGlvbi4NClRoaXMgcmVndWxh dG9yIGlzIGp1c3QgZmVlZGluZyBvbmx5IHRoZSBQSFkuIFdvdWxkIGJlIHJlbmFtZWQgdG8gcGNp ZV9waHktc3VwcGx5IGxhdGVyLg0KDQoNCj4gPiAgRXhhbXBsZToNCj4gPg0KPiA+IEBAIC0zNSw0 ICszNiw1IEBAIEV4YW1wbGU6DQo+ID4gIAkJICAgICAgICAgICAgICAgIDwwIDAgMCA0ICZpbnRj IEdJQ19TUEkgMTIwIElSUV9UWVBFX0xFVkVMX0hJR0g+Ow0KPiA+ICAJCWNsb2NrcyA9IDwmY2xr cyAxNDQ+LCA8JmNsa3MgMjA2PiwgPCZjbGtzIDE4OT47DQo+ID4gIAkJY2xvY2stbmFtZXMgPSAi cGNpZSIsICJwY2llX2J1cyIsICJwY2llX3BoeSI7DQo+ID4gKwkJcGNpZS1zdXBwbHkgPSA8JnJl Z19wY2llPjsNCj4gPiAgCX07DQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt eDZzeC1zZGIuZHRzDQo+ID4gYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cw0KPiA+ IGluZGV4IGEzOTgwZDkuLjI5NzY5MTMgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9hcm0vYm9vdC9k dHMvaW14NnN4LXNkYi5kdHMNCj4gPiArKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2Ri LmR0cw0KPiA+IEBAIC0yNTEsNiArMjUxLDEzIEBADQo+ID4gIAl9Ow0KPiA+ICB9Ow0KPiA+DQo+ ID4gKyZwY2llIHsNCj4gPiArCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7DQo+ID4gKwlwaW5j dHJsLTAgPSA8JnBpbmN0cmxfcGNpZT47DQo+ID4gKwlyZXNldC1ncGlvID0gPCZncGlvMiAwIDA+ Ow0KPiA+ICsJc3RhdHVzID0gIm9rYXkiOw0KPiA+ICt9Ow0KPiA+ICsNCj4gDQo+IFRoaXMgaXMg YWRkaW5nIFBDSWUgc3VwcG9ydCB0byBhIHNpbmdsZSBib2FyZCBhbmQgaGFzIG5vdGhpbmcgdG8g ZG8gd2l0aCB0aGUNCj4gYmluZGluZy4gU3BsaXQgb3V0IGludG8gYW5vdGhlciBwYXRjaC4NCltS aWNoYXJkXSBPay4NCj4gDQo+ID4gICZzc2kyIHsNCj4gPiAgCXN0YXR1cyA9ICJva2F5IjsNCj4g PiAgfTsNCj4gPiBAQCAtMzY1LDYgKzM3MiwxMiBAQA0KPiA+ICAJCQk+Ow0KPiA+ICAJCX07DQo+ ID4NCj4gPiArCQlwaW5jdHJsX3BjaWU6IHBjaWVncnAgew0KPiA+ICsJCQlmc2wscGlucyA9IDwN Cj4gPiArCQkJCU1YNlNYX1BBRF9FTkVUMV9DT0xfX0dQSU8yX0lPXzAgMHgxNzA1OQ0KPiA+ICsJ CQk+Ow0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICAJCXBpbmN0cmxfdmNjX3NkMzogdmNjc2QzZ3Jw IHsNCj4gPiAgCQkJZnNsLHBpbnMgPSA8DQo+ID4gIAkJCQlNWDZTWF9QQURfS0VZX0NPTDFfX0dQ SU8yX0lPXzExCQkweDE3MDU5DQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lt eDZzeC5kdHNpDQo+ID4gYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3guZHRzaSBpbmRleCBmNGI5 ZGE2Li40OTExMTYwIDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZzeC5k dHNpDQo+ID4gKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LmR0c2kNCj4gPiBAQCAtNjg5 LDkgKzY4OSwxMSBAQA0KPiA+ICAJCQl9Ow0KPiA+DQo+ID4gIAkJCWdwYzogZ3BjQDAyMGRjMDAw IHsNCj4gPiAtCQkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZzeC1ncGMiLCAiZnNsLGlteDZxLWdw YyI7DQo+ID4gKwkJCQljb21wYXRpYmxlID0gImZzbCxpbXg2c3gtZ3BjIiwNCj4gPiArCQkJCQkg ICAgICJmc2wsaW14NnEtZ3BjIiwgInN5c2NvbiI7DQo+IA0KPiBUaGlzIGhhcyBub3RoaW5nIHRv IGRvIHdpdGggdGhlIGlteDZzeCBiaW5kaW5nIGNoYW5nZS4gU3BsaXQgb3V0IGludG8gYW5vdGhl cg0KPiBwYXRjaCB3aXRoIG93biBqdXN0aWZpY2F0aW9uLg0KW1JpY2hhcmRdIE9rLg0KPiANCj4g PiAgCQkJCXJlZyA9IDwweDAyMGRjMDAwIDB4NDAwMD47DQo+ID4gIAkJCQlpbnRlcnJ1cHRzID0g PEdJQ19TUEkgODkgSVJRX1RZUEVfTEVWRUxfSElHSD47DQo+ID4gKwkJCQlwY2llLXN1cHBseSA9 IDwmcmVnX3BjaWU+Ow0KPiANCj4gVGhpcyBzaG91bGRuJ3QgYmUgaGVyZS4NCltSaWNoYXJkXSB3 b3VsZCBiZSByZW1vdmVkLg0KPiANCj4gPiAgCQkJfTsNCj4gPg0KPiA+ICAJCQlpb211eGM6IGlv bXV4Y0AwMjBlMDAwMCB7DQo+ID4gQEAgLTExODgsMjAgKzExOTAsMjMgQEANCj4gPiAgCQkJI2Fk ZHJlc3MtY2VsbHMgPSA8Mz47DQo+ID4gIAkJCSNzaXplLWNlbGxzID0gPDI+Ow0KPiA+ICAJCQlk ZXZpY2VfdHlwZSA9ICJwY2kiOw0KPiA+IC0JCQkJICAvKiBjb25maWd1cmF0aW9uIHNwYWNlICov DQo+ID4gLQkJCXJhbmdlcyA9IDwweDAwMDAwODAwIDAgMHgwOGYwMDAwMCAweDA4ZjAwMDAwIDAg MHgwMDA4MDAwMA0KPiA+IC0JCQkJICAvKiBkb3duc3RyZWFtIEkvTyAqLw0KPiA+IC0JCQkJICAw eDgxMDAwMDAwIDAgMCAgICAgICAgICAweDA4ZjgwMDAwIDAgMHgwMDAxMDAwMA0KPiA+IC0JCQkJ ICAvKiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeSAqLw0KPiA+IC0JCQkJICAweDgyMDAwMDAwIDAg MHgwODAwMDAwMCAweDA4MDAwMDAwIDAgMHgwMGYwMDAwMD47DQo+ID4gKwkJCXJhbmdlcyA9IDww eDAwMDAwODAwIDAgMHgwMWYwMDAwMCAweDA4ZjAwMDAwIDAgMHgwMDA4MDAwMCAvKg0KPiBjb25m aWd1cmF0aW9uIHNwYWNlICovDQo+ID4gKwkJCQkgIDB4ODEwMDAwMDAgMCAwICAgICAgICAgIDB4 MDhmODAwMDAgMCAweDAwMDEwMDAwIC8qDQo+IGRvd25zdHJlYW0gSS9PICovDQo+ID4gKwkJCQkg IDB4ODIwMDAwMDAgMCAweDAxMDAwMDAwIDB4MDgwMDAwMDAgMCAweDAwZjAwMDAwPjsgLyoNCj4g PiArbm9uLXByZWZldGNoYWJsZSBtZW1vcnkgKi8NCj4gDQo+IFlvdSBhcmUgY2hhbmdpbmcgdGhl IGNvbmZpZ3VyYXRpb24gc3BhY2UgaGVyZS4gV2FzIGl0IHdyb25nIGJlZm9yZT8gSWYgc28gdGhp cw0KPiBuZWVkcyB0byBiZSBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLiBBbHNvIGNv bmZpZyBzcGFjZSBhc3NpZ25lZCBpbg0KPiByYW5nZXMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIGFk ZCBpdCB0byB0aGUgcmVncyBwcm9wZXJ0eSBhcyBkb25lIG9uIGlteDZxLg0KPiANCltSaWNoYXJk XSBObywgaXQgaXNuJ3Qgd3JvbmcgYmVmb3JlLiBNeSBzcGVsbC1taXN0YWtlcyBoZXJlLg0KV291 bGQgYmUgY2hhbmdlZCBsYXRlci4NClRoZXJlIGFyZSBkaWZmZXJlbmNlcyBvZiB0aGUgbWVtb3J5 IHJhbmdlcw0KIG9mIHBjaWUgY2ZnL2lvL21lbSBiZXR3ZWVuIGlteDZzeCBhbmQgaW14NnFkbC4N Ck9uIGlteDZxLCB0aGUgb2Zmc2V0IGlzIDB4MDF4eF94eHh4LCBvbiBpbXg2c3gsIHRoZSBvZmZz ZXQgaXMgMHgwOHh4XzAwMDAuDQpUaGUgb3RoZXJzIGFyZSBzYW1lIHRvIGVhY2ggb3RoZXIuDQoN Cj4gPiAgCQkJbnVtLWxhbmVzID0gPDE+Ow0KPiA+IC0JCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkg MTIzIElSUV9UWVBFX0xFVkVMX0hJR0g+Ow0KPiA+IC0JCQljbG9ja3MgPSA8JmNsa3MgSU1YNlNY X0NMS19QQ0lFX1JFRl8xMjVNPiwNCj4gPiAtCQkJCSA8JmNsa3MgSU1YNlNYX0NMS19QQ0lFX0FY ST4sDQo+ID4gLQkJCQkgPCZjbGtzIElNWDZTWF9DTEtfTFZEUzFfT1VUPiwNCj4gPiAtCQkJCSA8 JmNsa3MgSU1YNlNYX0NMS19ESVNQTEFZX0FYST47DQo+ID4gLQkJCWNsb2NrLW5hbWVzID0gInBj aWVfcmVmXzEyNW0iLCAicGNpZV9heGkiLA0KPiA+IC0JCQkJICAgICAgImx2ZHNfZ2F0ZSIsICJk aXNwbGF5X2F4aSI7DQo+ID4gKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjAgSVJRX1RZUEVf TEVWRUxfSElHSD47DQo+IA0KPiBBZ2FpbiwgY2hhbmdpbmcgc29tZXRoaW5nIHdpdGhvdXQgbWVu dGlvbmluZyBpZiBpdCB3YXMgd3JvbmcgYmVmb3JlLg0KW1JpY2hhcmRdSXQncyBub3Qgd3Jvbmcg YmVmb3JlLCBqdXN0IGFsaWduIHdpdGggaW14NnFkbCBpbiAzLjE3LXJjMiBrZXJuZWwuDQo+IA0K PiA+ICsJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibXNpIjsNCj4gPiArCQkJI2ludGVycnVwdC1jZWxs cyA9IDwxPjsNCj4gPiArCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDB4Nz47DQo+ID4g KwkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaW50YyBHSUNfU1BJIDEyMyBJUlFfVFlQRV9M RVZFTF9ISUdIPiwNCj4gPiArCQkJICAgICAgICAgICAgICAgIDwwIDAgMCAyICZpbnRjIEdJQ19T UEkgMTIyIElSUV9UWVBFX0xFVkVMX0hJR0g+LA0KPiA+ICsJCQkgICAgICAgICAgICAgICAgPDAg MCAwIDMgJmludGMgR0lDX1NQSSAxMjEgSVJRX1RZUEVfTEVWRUxfSElHSD4sDQo+ID4gKwkJCSAg ICAgICAgICAgICAgICA8MCAwIDAgNCAmaW50YyBHSUNfU1BJIDEyMCBJUlFfVFlQRV9MRVZFTF9I SUdIPjsNCj4gPiArCQkJY2xvY2tzID0gPCZjbGtzIElNWDZTWF9DTEtfUENJRV9BWEk+LA0KPiA+ ICsJCQkJIDwmY2xrcyBJTVg2U1hfQ0xLX0RJU1BMQVlfQVhJPiwNCj4gPiArCQkJCSA8JmNsa3Mg SU1YNlNYX0NMS19MVkRTMV9PVVQ+Ow0KPiA+ICsJCQljbG9jay1uYW1lcyA9ICJwY2llIiwgInBj aWVfcGh5IiwgInBjaWVfYnVzIjsNCj4gDQo+IElzIHRoaXMgZGlzcGxheV9heGkgY2xvY2sgcmVh bGx5IGZlZWRpbmcgdGhlIFBIWSwgb3IgaXMgaXQganVzdCBhIHBhcmVudCBvZg0KPiBwY2llX2F4 aSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHBjaWVfYXhpIHRvIHdvcms/IEluIHRoYXQg Y2FzZSB3ZSBuZWVkDQo+IHRvIG1ha2UgcGNpZV9waHkgY2xvY2sgb3B0aW9uYWwgZm9yIGlteDZz eCBhbmQgbW9kZWwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuDQo+IHBjaWVfYXhpIGFuZCBkaXNw bGF5X2F4aSBpbiB0aGUgY2xvY2sgZHJpdmVyLg0KPiANCj4gSSB3aWxsIG5vdCBhbGxvdyB0aGUg ZW5hYmxpbmcgb2YgY2xvY2tzIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBQQ0llIGNvcmUN Cj4gdG8gY3JlZXAgYmFjayBpbnRvIHRoaXMgZHJpdmVyLiBJdCBoYXMgY29zdCBtZSBxdWl0ZSBz b21lIHRpbWUgYW5kIGEgYmluZGluZw0KPiBjaGFuZ2UgdG8gY29ycmVjdCB0aGlzIGZvciBpbXg2 cS4NCltSaWNoYXJkXUNvbmZpcm1lZCB0aGF0IHRoZSBkaXNwbGF5X2F4aSBpcyBub3QgcmVsYXRl ZCB0byBwY2llIGNsay4NCk9ubHkgdGhlIGRpc3BheV9wb2RmIGlzIHJlcXVpcmVkIHRvIGJlIG9w ZW5lZCBmb3IgcGNpZV9heGkuDQpBbmQgaXQgaXMgY29uc3RydWN0ZWQgYWxyZWFkeSBpbiBhcmNo L2FybS9tYWNoLWlteC9jbGstaW14NnN4LmMuDQpJJ20gZ2xhZCB0aGF0IHlvdSBjb25zaXN0IHRv IG1ha2UgY29tbWVudHMgb24gdGhlIHdyb25nLXVzYWdlIG9mIGRpc3BsYXlfYXhpIGNsb2NrLg0K VGhhbmtzLg0KDQo+IA0KPiA+ICsJCQlwY2llLXN1cHBseSA9IDwmcmVnX3BjaWU+Ow0KPiA+ICAJ CQlzdGF0dXMgPSAiZGlzYWJsZWQiOw0KPiA+ICAJCX07DQo+ID4gIAl9Ow0KPiA+IGRpZmYgLS1n aXQgYS9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZp Zw0KPiA+IGluZGV4IGJlOWE1MWEuLjBhMDU1ZjAgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9hcm0v bWFjaC1pbXgvS2NvbmZpZw0KPiA+ICsrKyBiL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcNCj4g PiBAQCAtNzE4LDYgKzcxOCw3IEBAIGNvbmZpZyBTT0NfSU1YNlNMDQo+ID4NCj4gPiAgY29uZmln IFNPQ19JTVg2U1gNCj4gPiAgCWJvb2wgImkuTVg2IFNvbG9YIHN1cHBvcnQiDQo+ID4gKwlzZWxl Y3QgUENJX0RPTUFJTlMgaWYgUENJDQo+ID4gIAlzZWxlY3QgUElOQ1RSTF9JTVg2U1gNCj4gPiAg CXNlbGVjdCBTT0NfSU1YNg0KPiA+DQo+IFRoaXMgY2hhbmdlIGlzIGNvbXBsZXRlbHkgdW5yZWxh dGVkLiBBbHNvIEkgZG9uJ3Qgc2VlIHdoeSB5b3UgbmVlZCB0aGlzLg0KPiBJZiB5b3UgbmVlZCB0 aGlzIGZvciBpbXg2c3ggcGxlYXNlIGxvb2sgYXQgdGhlIGxpbnV4LXBjaSBNTCwgUGhpbCBFZHdv cnRoeQ0KPiBwb3N0ZWQgYSBwYXRjaCB0byBlbmFibGUgdGhpcyBmb3IgYWxsIEFSTSBkZXZpY2Vz IGFuZCBJIHdvdWxkIGxpa2UgdG8gc2VlIHlvdXINCj4gb3B0aW9uIHRoZXJlLg0KW1JpY2hhcmRd IFdvdWxkIGJlIHJlbW92ZWQuDQo+IA0KPiByZWdhcmRzLA0KPiBMdWNhcw0KPiANCj4gLS0NCj4g UGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICB8IEx1Y2FzIFN0YWNoICAgICAgICAgICAgICAg ICB8DQo+IEluZHVzdHJpYWwgTGludXggU29sdXRpb25zICAgfCBodHRwOi8vd3d3LnBlbmd1dHJv bml4LmRlLyAgfA0KDQoNCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCg0K ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu ` (2 preceding siblings ...) 2014-09-23 4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu @ 2014-09-23 4:11 ` Richard Zhu 2014-09-23 10:21 ` Lucas Stach 2014-09-23 4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu 2014-09-23 9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach 5 siblings, 1 reply; 31+ messages in thread From: Richard Zhu @ 2014-09-23 4:11 UTC (permalink / raw) To: linux-pci-owner Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu Signed-off-by: Richard Zhu <r65037@freescale.com> --- include/linux/mfd/syscon/imx6q-iomuxc-gpr.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h index ff44374..f02875e 100644 --- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h +++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h @@ -113,10 +113,12 @@ #define IMX6Q_GPR1_MIPI_IPU1_MUX_GASKET 0x0 #define IMX6Q_GPR1_MIPI_IPU1_MUX_IOMUX BIT(19) #define IMX6Q_GPR1_PCIE_TEST_PD BIT(18) +#define IMX6Q_GPR1_PCIE_TEST_PD_CLR 0x0 #define IMX6Q_GPR1_IPU_VPU_MUX_MASK BIT(17) #define IMX6Q_GPR1_IPU_VPU_MUX_IPU1 0x0 #define IMX6Q_GPR1_IPU_VPU_MUX_IPU2 BIT(17) #define IMX6Q_GPR1_PCIE_REF_CLK_EN BIT(16) +#define IMX6Q_GPR1_PCIE_REF_CLK_CLR 0x0 #define IMX6Q_GPR1_USB_EXP_MODE BIT(15) #define IMX6Q_GPR1_PCIE_INT BIT(14) #define IMX6Q_GPR1_USB_OTG_ID_SEL_MASK BIT(13) @@ -300,7 +302,9 @@ #define IMX6Q_GPR12_ARMP_APB_CLK_EN BIT(24) #define IMX6Q_GPR12_DEVICE_TYPE (0xf << 12) #define IMX6Q_GPR12_PCIE_CTL_2 BIT(10) +#define IMX6Q_GPR12_PCIE_CTL_2_CLR 0x0 #define IMX6Q_GPR12_LOS_LEVEL (0x1f << 4) +#define IMX6Q_GPR12_LOS_LEVEL_9 (0x9 << 4) #define IMX6Q_GPR13_SDMA_STOP_REQ BIT(30) #define IMX6Q_GPR13_CAN2_STOP_REQ BIT(29) @@ -395,4 +399,14 @@ #define IMX6SL_GPR1_FEC_CLOCK_MUX1_SEL_MASK (0x3 << 17) #define IMX6SL_GPR1_FEC_CLOCK_MUX2_SEL_MASK (0x1 << 14) +/* For imx6sx iomux gpr register field define */ +#define IMX6SX_GPR5_PCIE_BTNRST BIT(19) +#define IMX6SX_GPR5_PCIE_BTNRST_CLR 0x0 +#define IMX6SX_GPR5_PCIE_PERST BIT(18) +#define IMX6SX_GPR5_PCIE_PERST_CLR 0x0 + +#define IMX6SX_GPR12_PCIE_TEST_PD BIT(30) +#define IMX6SX_GPR12_PCIE_TEST_PD_CLR 0x0 +#define IMX6SX_GPR12_RX_EQ_MASK (0x7 << 0) +#define IMX6SX_GPR12_RX_EQ_2 (0x2 << 0) #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions 2014-09-23 4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu @ 2014-09-23 10:21 ` Lucas Stach 2014-09-24 4:45 ` Hong-Xing.Zhu 0 siblings, 1 reply; 31+ messages in thread From: Lucas Stach @ 2014-09-23 10:21 UTC (permalink / raw) To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: > Signed-off-by: Richard Zhu <r65037@freescale.com> I don't think those _CLR defines make any sense. Can we just use the mask and a value of 0 in the regmap updates? I don't see how those defines add any value. > --- > include/linux/mfd/syscon/imx6q-iomuxc-gpr.h | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h > index ff44374..f02875e 100644 > --- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h > +++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h > @@ -113,10 +113,12 @@ > #define IMX6Q_GPR1_MIPI_IPU1_MUX_GASKET 0x0 > #define IMX6Q_GPR1_MIPI_IPU1_MUX_IOMUX BIT(19) > #define IMX6Q_GPR1_PCIE_TEST_PD BIT(18) > +#define IMX6Q_GPR1_PCIE_TEST_PD_CLR 0x0 > #define IMX6Q_GPR1_IPU_VPU_MUX_MASK BIT(17) > #define IMX6Q_GPR1_IPU_VPU_MUX_IPU1 0x0 > #define IMX6Q_GPR1_IPU_VPU_MUX_IPU2 BIT(17) > #define IMX6Q_GPR1_PCIE_REF_CLK_EN BIT(16) > +#define IMX6Q_GPR1_PCIE_REF_CLK_CLR 0x0 > #define IMX6Q_GPR1_USB_EXP_MODE BIT(15) > #define IMX6Q_GPR1_PCIE_INT BIT(14) > #define IMX6Q_GPR1_USB_OTG_ID_SEL_MASK BIT(13) > @@ -300,7 +302,9 @@ > #define IMX6Q_GPR12_ARMP_APB_CLK_EN BIT(24) > #define IMX6Q_GPR12_DEVICE_TYPE (0xf << 12) > #define IMX6Q_GPR12_PCIE_CTL_2 BIT(10) > +#define IMX6Q_GPR12_PCIE_CTL_2_CLR 0x0 > #define IMX6Q_GPR12_LOS_LEVEL (0x1f << 4) > +#define IMX6Q_GPR12_LOS_LEVEL_9 (0x9 << 4) > > #define IMX6Q_GPR13_SDMA_STOP_REQ BIT(30) > #define IMX6Q_GPR13_CAN2_STOP_REQ BIT(29) > @@ -395,4 +399,14 @@ > #define IMX6SL_GPR1_FEC_CLOCK_MUX1_SEL_MASK (0x3 << 17) > #define IMX6SL_GPR1_FEC_CLOCK_MUX2_SEL_MASK (0x1 << 14) > > +/* For imx6sx iomux gpr register field define */ > +#define IMX6SX_GPR5_PCIE_BTNRST BIT(19) > +#define IMX6SX_GPR5_PCIE_BTNRST_CLR 0x0 > +#define IMX6SX_GPR5_PCIE_PERST BIT(18) > +#define IMX6SX_GPR5_PCIE_PERST_CLR 0x0 > + > +#define IMX6SX_GPR12_PCIE_TEST_PD BIT(30) > +#define IMX6SX_GPR12_PCIE_TEST_PD_CLR 0x0 > +#define IMX6SX_GPR12_RX_EQ_MASK (0x7 << 0) > +#define IMX6SX_GPR12_RX_EQ_2 (0x2 << 0) > #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */ -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions 2014-09-23 10:21 ` Lucas Stach @ 2014-09-24 4:45 ` Hong-Xing.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-24 4:45 UTC (permalink / raw) To: Lucas Stach Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, festevam@gmail.com, tharvey@gateworks.com DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIz LCAyMDE0IDY6MjEgUE0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNp LW93bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNo YXduLQ0KPiBSNjUwNzM7IGZlc3RldmFtQGdtYWlsLmNvbTsgdGhhcnZleUBnYXRld29ya3MuY29t DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgNC81XSBQQ0k6IGlteDY6IGFkZCBpbXg2c3ggcGNp ZSByZWxhdGVkIGdwciBiaXRzDQo+IGRlZmluaXRpb25zDQo+IA0KPiBBbSBEaWVuc3RhZywgZGVu IDIzLjA5LjIwMTQsIDEyOjExICswODAwIHNjaHJpZWIgUmljaGFyZCBaaHU6DQo+ID4gU2lnbmVk LW9mZi1ieTogUmljaGFyZCBaaHUgPHI2NTAzN0BmcmVlc2NhbGUuY29tPg0KPiANCj4gSSBkb24n dCB0aGluayB0aG9zZSBfQ0xSIGRlZmluZXMgbWFrZSBhbnkgc2Vuc2UuIENhbiB3ZSBqdXN0IHVz ZSB0aGUgbWFzayBhbmQNCj4gYSB2YWx1ZSBvZiAwIGluIHRoZSByZWdtYXAgdXBkYXRlcz8gSSBk b24ndCBzZWUgaG93IHRob3NlIGRlZmluZXMgYWRkIGFueQ0KPiB2YWx1ZS4NCj4gDQoNCltSaWNo YXJkXSBPay4NCkJlc3QgUmVnYXJkcw0KUmljaGFyZCBaaHUNCj4gPiAtLS0NCj4gPiAgaW5jbHVk ZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaCB8IDE0ICsrKysrKysrKysrKysr DQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaA0KPiA+IGIv aW5jbHVkZS9saW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaA0KPiA+IGluZGV4IGZm NDQzNzQuLmYwMjg3NWUgMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29u L2lteDZxLWlvbXV4Yy1ncHIuaA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi9p bXg2cS1pb211eGMtZ3ByLmgNCj4gPiBAQCAtMTEzLDEwICsxMTMsMTIgQEANCj4gPiAgI2RlZmlu ZSBJTVg2UV9HUFIxX01JUElfSVBVMV9NVVhfR0FTS0VUCQkweDANCj4gPiAgI2RlZmluZSBJTVg2 UV9HUFIxX01JUElfSVBVMV9NVVhfSU9NVVgJCUJJVCgxOSkNCj4gPiAgI2RlZmluZSBJTVg2UV9H UFIxX1BDSUVfVEVTVF9QRAkJCUJJVCgxOCkNCj4gPiArI2RlZmluZSBJTVg2UV9HUFIxX1BDSUVf VEVTVF9QRF9DTFIJCTB4MA0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjFfSVBVX1ZQVV9NVVhfTUFT SwkJQklUKDE3KQ0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjFfSVBVX1ZQVV9NVVhfSVBVMQkJMHgw DQo+ID4gICNkZWZpbmUgSU1YNlFfR1BSMV9JUFVfVlBVX01VWF9JUFUyCQlCSVQoMTcpDQo+ID4g ICNkZWZpbmUgSU1YNlFfR1BSMV9QQ0lFX1JFRl9DTEtfRU4JCUJJVCgxNikNCj4gPiArI2RlZmlu ZSBJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19DTFIJCTB4MA0KPiA+ICAjZGVmaW5lIElNWDZRX0dQ UjFfVVNCX0VYUF9NT0RFCQkJQklUKDE1KQ0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjFfUENJRV9J TlQJCQlCSVQoMTQpDQo+ID4gICNkZWZpbmUgSU1YNlFfR1BSMV9VU0JfT1RHX0lEX1NFTF9NQVNL CQlCSVQoMTMpDQo+ID4gQEAgLTMwMCw3ICszMDIsOSBAQA0KPiA+ICAjZGVmaW5lIElNWDZRX0dQ UjEyX0FSTVBfQVBCX0NMS19FTgkJQklUKDI0KQ0KPiA+ICAjZGVmaW5lIElNWDZRX0dQUjEyX0RF VklDRV9UWVBFCQkJKDB4ZiA8PCAxMikNCj4gPiAgI2RlZmluZSBJTVg2UV9HUFIxMl9QQ0lFX0NU TF8yCQkJQklUKDEwKQ0KPiA+ICsjZGVmaW5lIElNWDZRX0dQUjEyX1BDSUVfQ1RMXzJfQ0xSCQkw eDANCj4gPiAgI2RlZmluZSBJTVg2UV9HUFIxMl9MT1NfTEVWRUwJCQkoMHgxZiA8PCA0KQ0KPiA+ ICsjZGVmaW5lIElNWDZRX0dQUjEyX0xPU19MRVZFTF85CQkJKDB4OSA8PCA0KQ0KPiA+DQo+ID4g ICNkZWZpbmUgSU1YNlFfR1BSMTNfU0RNQV9TVE9QX1JFUQkJQklUKDMwKQ0KPiA+ICAjZGVmaW5l IElNWDZRX0dQUjEzX0NBTjJfU1RPUF9SRVEJCUJJVCgyOSkNCj4gPiBAQCAtMzk1LDQgKzM5OSwx NCBAQA0KPiA+ICAjZGVmaW5lIElNWDZTTF9HUFIxX0ZFQ19DTE9DS19NVVgxX1NFTF9NQVNLICAg ICgweDMgPDwgMTcpDQo+ID4gICNkZWZpbmUgSU1YNlNMX0dQUjFfRkVDX0NMT0NLX01VWDJfU0VM X01BU0sgICAgKDB4MSA8PCAxNCkNCj4gPg0KPiA+ICsvKiBGb3IgaW14NnN4IGlvbXV4IGdwciBy ZWdpc3RlciBmaWVsZCBkZWZpbmUgKi8NCj4gPiArI2RlZmluZSBJTVg2U1hfR1BSNV9QQ0lFX0JU TlJTVAkJCUJJVCgxOSkNCj4gPiArI2RlZmluZSBJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVF9DTFIJ CTB4MA0KPiA+ICsjZGVmaW5lIElNWDZTWF9HUFI1X1BDSUVfUEVSU1QJCQlCSVQoMTgpDQo+ID4g KyNkZWZpbmUgSU1YNlNYX0dQUjVfUENJRV9QRVJTVF9DTFIJCTB4MA0KPiA+ICsNCj4gPiArI2Rl ZmluZSBJTVg2U1hfR1BSMTJfUENJRV9URVNUX1BECQlCSVQoMzApDQo+ID4gKyNkZWZpbmUgSU1Y NlNYX0dQUjEyX1BDSUVfVEVTVF9QRF9DTFIJCTB4MA0KPiA+ICsjZGVmaW5lIElNWDZTWF9HUFIx Ml9SWF9FUV9NQVNLCQkJKDB4NyA8PCAwKQ0KPiA+ICsjZGVmaW5lIElNWDZTWF9HUFIxMl9SWF9F UV8yCQkJKDB4MiA8PCAwKQ0KPiA+ICAjZW5kaWYgLyogX19MSU5VWF9JTVg2UV9JT01VWENfR1BS X0ggKi8NCj4gDQo+IC0tDQo+IFBlbmd1dHJvbml4IGUuSy4gICAgICAgICAgICAgfCBMdWNhcyBT dGFjaCAgICAgICAgICAgICAgICAgfA0KPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAgIHwg aHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwNCg0K ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu ` (3 preceding siblings ...) 2014-09-23 4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu @ 2014-09-23 4:11 ` Richard Zhu 2014-09-23 11:00 ` Lucas Stach 2014-09-23 9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach 5 siblings, 1 reply; 31+ messages in thread From: Richard Zhu @ 2014-09-23 4:11 UTC (permalink / raw) To: linux-pci-owner Cc: linux-pci, shawn.guo, festevam, l.stach, tharvey, Richard Zhu - imx6sx pcie has its own standalone pcie power supply. In order to turn on the imx6sx pcie power during initialization. Add the pcie regulator and the gpc regmap into the imx6sx pcie structure. - imx6sx pcie has the new added reset mechanism, add the reset operations into the initialization. - Register one PM call-back, enter/exit L2 state of the ASPM during system suspend/resume. Signed-off-by: Richard Zhu <r65037@freescale.com> --- drivers/pci/host/pci-imx6.c | 164 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 146 insertions(+), 18 deletions(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index bc4222b..99ecb5d 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -18,12 +18,16 @@ #include <linux/mfd/syscon.h> #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h> #include <linux/module.h> +#include <linux/of_address.h> +#include <linux/of_device.h> #include <linux/of_gpio.h> #include <linux/pci.h> #include <linux/platform_device.h> #include <linux/regmap.h> +#include <linux/regulator/consumer.h> #include <linux/resource.h> #include <linux/signal.h> +#include <linux/syscore_ops.h> #include <linux/types.h> #include <linux/interrupt.h> @@ -31,15 +35,30 @@ #define to_imx6_pcie(x) container_of(x, struct imx6_pcie, pp) +/* The pcie who have standalone power domain */ +#define PCIE_PHY_HAS_PWR_DOMAIN BIT(0) + +struct imx_pcie_data { + unsigned int flags; +}; + +static const struct imx_pcie_data imx6sx_pcie_data = { + .flags = PCIE_PHY_HAS_PWR_DOMAIN, +}; + struct imx6_pcie { int reset_gpio; + const struct imx_pcie_data *data; struct clk *pcie_bus; struct clk *pcie_phy; struct clk *pcie; struct pcie_port pp; struct regmap *iomuxc_gpr; + struct regmap *gpc_ips_reg; + struct regulator *pcie_regulator; void __iomem *mem_base; }; +static struct imx6_pcie *imx6_pcie; /* PCIe Root Complex registers (memory-mapped) */ #define PCIE_RC_LCR 0x7c @@ -77,6 +96,11 @@ struct imx6_pcie { #define PHY_RX_OVRD_IN_LO_RX_DATA_EN (1 << 5) #define PHY_RX_OVRD_IN_LO_RX_PLL_EN (1 << 3) +static inline bool is_imx6sx_pcie(struct imx6_pcie *imx6_pcie) +{ + return imx6_pcie->data == &imx6sx_pcie_data; +} + static int pcie_phy_poll_ack(void __iomem *dbi_base, int exp_val) { u32 val; @@ -275,11 +299,17 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) goto err_pcie; } - /* power up core phy and enable ref clock */ - regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, - IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); - regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, - IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); + if (is_imx6sx_pcie(imx6_pcie)) { + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, + IMX6SX_GPR12_PCIE_TEST_PD, + IMX6SX_GPR12_PCIE_TEST_PD_CLR); + } else { + /* power up core phy and enable ref clock */ + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, + IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, + IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); + } /* allow the clocks to stabilize */ usleep_range(200, 500); @@ -290,6 +320,18 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) msleep(100); gpio_set_value(imx6_pcie->reset_gpio, 1); } + + /* + * iMX6SX PCIe has the stand-alone power domain. + * refer to the initialization for iMX6SX PCIe, + * release the PCIe PHY reset here, + * before LTSSM enable is set. + */ + if (is_imx6sx_pcie(imx6_pcie)) + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5, + IMX6SX_GPR5_PCIE_BTNRST, + IMX6SX_GPR5_PCIE_BTNRST_CLR); + return 0; err_pcie: @@ -304,15 +346,38 @@ err_pcie_phy: static void imx6_pcie_init_phy(struct pcie_port *pp) { struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); + int ret; + + /* + * iMX6SX PCIe has the stand-alone power domain + * add the initialization here for iMX6SX PCIe. + */ + if (is_imx6sx_pcie(imx6_pcie)) { + /* Force PCIe PHY reset */ + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5, + IMX6SX_GPR5_PCIE_BTNRST, + IMX6SX_GPR5_PCIE_BTNRST); + + regmap_update_bits(imx6_pcie->gpc_ips_reg, 0, 1 << 7, 1 << 7); + /* Power up PCIe PHY, ANATOP_REG_CORE offset 0x140, bit13-9 */ + regulator_set_voltage(imx6_pcie->pcie_regulator, + 1100000, 1100000); + ret = regulator_enable(imx6_pcie->pcie_regulator); + if (ret) + dev_info(pp->dev, "failed to enable pcie regulator.\n"); + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, + IMX6SX_GPR12_RX_EQ_MASK, IMX6SX_GPR12_RX_EQ_2); + } regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, - IMX6Q_GPR12_PCIE_CTL_2, 0 << 10); + IMX6Q_GPR12_PCIE_CTL_2, + IMX6Q_GPR12_PCIE_CTL_2_CLR); /* configure constant input signal to the pcie ctrl and phy */ regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12); regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, - IMX6Q_GPR12_LOS_LEVEL, 9 << 4); + IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9); regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8, IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0); @@ -370,7 +435,8 @@ static int imx6_pcie_start_link(struct pcie_port *pp) /* Start LTSSM. */ regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, - IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); + IMX6Q_GPR12_PCIE_CTL_2, + IMX6Q_GPR12_PCIE_CTL_2); ret = imx6_pcie_wait_for_link(pp); if (ret) @@ -546,10 +612,64 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp, return 0; } +static const struct of_device_id imx6_pcie_of_match[] = { + { .compatible = "fsl,imx6q-pcie", }, + { .compatible = "fsl,imx6sx-pcie", .data = &imx6sx_pcie_data}, + {}, +}; +MODULE_DEVICE_TABLE(of, imx6_pcie_of_match); + +#ifdef CONFIG_PM_SLEEP +static int pci_imx_suspend(void) +{ + if (is_imx6sx_pcie(imx6_pcie)) { + /* PM_TURN_OFF */ + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, + BIT(16), 1 << 16); + udelay(10); + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, + BIT(16), 0 << 16); + } + + return 0; +} + +static void pci_imx_resume(void) +{ + struct pcie_port *pp = &imx6_pcie->pp; + + if (is_imx6sx_pcie(imx6_pcie)) { + /* reset iMX6SX PCIe */ + regmap_update_bits(imx6_pcie->iomuxc_gpr, + IOMUXC_GPR5, BIT(18), 1 << 18); + + regmap_update_bits(imx6_pcie->iomuxc_gpr, + IOMUXC_GPR5, BIT(18), 0 << 18); + + /* + * controller maybe turn off, re-configure again + * Set the CLASS_REV of RC CFG header to + * PCI_CLASS_BRIDGE_PCI + */ + writel(readl(pp->dbi_base + PCI_CLASS_REVISION) + | (PCI_CLASS_BRIDGE_PCI << 16), + pp->dbi_base + PCI_CLASS_REVISION); + + dw_pcie_setup_rc(pp); + } +} + +static struct syscore_ops pci_imx_syscore_ops = { + .suspend = pci_imx_suspend, + .resume = pci_imx_resume, +}; +#endif + static int __init imx6_pcie_probe(struct platform_device *pdev) { - struct imx6_pcie *imx6_pcie; struct pcie_port *pp; + const struct of_device_id *of_id = + of_match_device(imx6_pcie_of_match, &pdev->dev); struct device_node *np = pdev->dev.of_node; struct resource *dbi_base; int ret; @@ -560,6 +680,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) pp = &imx6_pcie->pp; pp->dev = &pdev->dev; + imx6_pcie->data = of_id->data; /* Added for PCI abort handling */ hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0, @@ -603,9 +724,19 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) return PTR_ERR(imx6_pcie->pcie); } - /* Grab GPR config register range */ - imx6_pcie->iomuxc_gpr = - syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); + if (is_imx6sx_pcie(imx6_pcie)) { + imx6_pcie->pcie_regulator = devm_regulator_get(pp->dev, "pcie"); + + imx6_pcie->iomuxc_gpr = + syscon_regmap_lookup_by_compatible + ("fsl,imx6sx-iomuxc-gpr"); + imx6_pcie->gpc_ips_reg = + syscon_regmap_lookup_by_compatible("fsl,imx6sx-gpc"); + } else { + imx6_pcie->iomuxc_gpr = + syscon_regmap_lookup_by_compatible + ("fsl,imx6q-iomuxc-gpr"); + } if (IS_ERR(imx6_pcie->iomuxc_gpr)) { dev_err(&pdev->dev, "unable to find iomuxc registers\n"); return PTR_ERR(imx6_pcie->iomuxc_gpr); @@ -616,6 +747,9 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) return ret; platform_set_drvdata(pdev, imx6_pcie); +#ifdef CONFIG_PM_SLEEP + register_syscore_ops(&pci_imx_syscore_ops); +#endif return 0; } @@ -627,12 +761,6 @@ static void imx6_pcie_shutdown(struct platform_device *pdev) imx6_pcie_assert_core_reset(&imx6_pcie->pp); } -static const struct of_device_id imx6_pcie_of_match[] = { - { .compatible = "fsl,imx6q-pcie", }, - {}, -}; -MODULE_DEVICE_TABLE(of, imx6_pcie_of_match); - static struct platform_driver imx6_pcie_driver = { .driver = { .name = "imx6q-pcie", -- 1.9.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support 2014-09-23 4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu @ 2014-09-23 11:00 ` Lucas Stach 2014-09-24 7:09 ` Hong-Xing.Zhu 0 siblings, 1 reply; 31+ messages in thread From: Lucas Stach @ 2014-09-23 11:00 UTC (permalink / raw) To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: > - imx6sx pcie has its own standalone pcie power supply. > In order to turn on the imx6sx pcie power during > initialization. Add the pcie regulator and the gpc regmap > into the imx6sx pcie structure. > - imx6sx pcie has the new added reset mechanism, add the > reset operations into the initialization. > - Register one PM call-back, enter/exit L2 state of the ASPM > during system suspend/resume. > > Signed-off-by: Richard Zhu <r65037@freescale.com> > --- > drivers/pci/host/pci-imx6.c | 164 +++++++++++++++++++++++++++++++++++++++----- > 1 file changed, 146 insertions(+), 18 deletions(-) > > diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c > index bc4222b..99ecb5d 100644 > --- a/drivers/pci/host/pci-imx6.c > +++ b/drivers/pci/host/pci-imx6.c > @@ -18,12 +18,16 @@ > #include <linux/mfd/syscon.h> > #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h> > #include <linux/module.h> > +#include <linux/of_address.h> > +#include <linux/of_device.h> > #include <linux/of_gpio.h> > #include <linux/pci.h> > #include <linux/platform_device.h> > #include <linux/regmap.h> > +#include <linux/regulator/consumer.h> > #include <linux/resource.h> > #include <linux/signal.h> > +#include <linux/syscore_ops.h> > #include <linux/types.h> > #include <linux/interrupt.h> > > @@ -31,15 +35,30 @@ > > #define to_imx6_pcie(x) container_of(x, struct imx6_pcie, pp) > > +/* The pcie who have standalone power domain */ > +#define PCIE_PHY_HAS_PWR_DOMAIN BIT(0) > + > +struct imx_pcie_data { > + unsigned int flags; > +}; > + > +static const struct imx_pcie_data imx6sx_pcie_data = { > + .flags = PCIE_PHY_HAS_PWR_DOMAIN, > +}; > + You don't use this flag anywhere else so all the above is not needed if you rewrite the below... > struct imx6_pcie { > int reset_gpio; > + const struct imx_pcie_data *data; > struct clk *pcie_bus; > struct clk *pcie_phy; > struct clk *pcie; > struct pcie_port pp; > struct regmap *iomuxc_gpr; > + struct regmap *gpc_ips_reg; > + struct regulator *pcie_regulator; > void __iomem *mem_base; > }; > +static struct imx6_pcie *imx6_pcie; > > /* PCIe Root Complex registers (memory-mapped) */ > #define PCIE_RC_LCR 0x7c > @@ -77,6 +96,11 @@ struct imx6_pcie { > #define PHY_RX_OVRD_IN_LO_RX_DATA_EN (1 << 5) > #define PHY_RX_OVRD_IN_LO_RX_PLL_EN (1 << 3) > > +static inline bool is_imx6sx_pcie(struct imx6_pcie *imx6_pcie) > +{ > + return imx6_pcie->data == &imx6sx_pcie_data; ... to return of_device_is_compatible(np, "fsl,imx6sx-pcie"); > +} > + > static int pcie_phy_poll_ack(void __iomem *dbi_base, int exp_val) > { > u32 val; > @@ -275,11 +299,17 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) > goto err_pcie; > } > > - /* power up core phy and enable ref clock */ > - regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > - IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); > - regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > - IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); > + if (is_imx6sx_pcie(imx6_pcie)) { > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > + IMX6SX_GPR12_PCIE_TEST_PD, > + IMX6SX_GPR12_PCIE_TEST_PD_CLR); > + } else { > + /* power up core phy and enable ref clock */ > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > + IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, > + IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); > + } > > /* allow the clocks to stabilize */ > usleep_range(200, 500); > @@ -290,6 +320,18 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) > msleep(100); > gpio_set_value(imx6_pcie->reset_gpio, 1); > } > + > + /* > + * iMX6SX PCIe has the stand-alone power domain. > + * refer to the initialization for iMX6SX PCIe, > + * release the PCIe PHY reset here, > + * before LTSSM enable is set. > + */ This comment is confusing. I don't see how this has something to do with the power-domain. It should read something like "Release the PHY reset, that we have set in imx6_pcie_init_phy() now." > + if (is_imx6sx_pcie(imx6_pcie)) > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5, > + IMX6SX_GPR5_PCIE_BTNRST, > + IMX6SX_GPR5_PCIE_BTNRST_CLR); > + > return 0; > > err_pcie: > @@ -304,15 +346,38 @@ err_pcie_phy: > static void imx6_pcie_init_phy(struct pcie_port *pp) > { > struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); > + int ret; > + > + /* > + * iMX6SX PCIe has the stand-alone power domain > + * add the initialization here for iMX6SX PCIe. > + */ Again this could be phrased better: "Power up the separate domain available on i.MX6SX" > + if (is_imx6sx_pcie(imx6_pcie)) { > + /* Force PCIe PHY reset */ > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5, > + IMX6SX_GPR5_PCIE_BTNRST, > + IMX6SX_GPR5_PCIE_BTNRST); > + > + regmap_update_bits(imx6_pcie->gpc_ips_reg, 0, 1 << 7, 1 << 7); Magic values here. Also this is the only time we need to access gpc_ips_reg. So if this is a prerequisite to enabling the ANATOP regulator, I would argue it should be done in the regulator driver. > + /* Power up PCIe PHY, ANATOP_REG_CORE offset 0x140, bit13-9 */ Oh so this is actually a PHY regulator, not feeding the whole core, but just the PHY? You could remove the comment it is clear what you are doing from the code and the offsets are of no interest in the PCIe driver. > + regulator_set_voltage(imx6_pcie->pcie_regulator, > + 1100000, 1100000); > + ret = regulator_enable(imx6_pcie->pcie_regulator); > + if (ret) > + dev_info(pp->dev, "failed to enable pcie regulator.\n"); > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > + IMX6SX_GPR12_RX_EQ_MASK, IMX6SX_GPR12_RX_EQ_2); > + } > > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > - IMX6Q_GPR12_PCIE_CTL_2, 0 << 10); > + IMX6Q_GPR12_PCIE_CTL_2, > + IMX6Q_GPR12_PCIE_CTL_2_CLR); > > /* configure constant input signal to the pcie ctrl and phy */ > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12); > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > - IMX6Q_GPR12_LOS_LEVEL, 9 << 4); > + IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9); > > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8, > IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0); > @@ -370,7 +435,8 @@ static int imx6_pcie_start_link(struct pcie_port *pp) > > /* Start LTSSM. */ > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > - IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); > + IMX6Q_GPR12_PCIE_CTL_2, > + IMX6Q_GPR12_PCIE_CTL_2); > > ret = imx6_pcie_wait_for_link(pp); > if (ret) > @@ -546,10 +612,64 @@ static int __init imx6_add_pcie_port(struct pcie_port *pp, > return 0; > } > > +static const struct of_device_id imx6_pcie_of_match[] = { > + { .compatible = "fsl,imx6q-pcie", }, > + { .compatible = "fsl,imx6sx-pcie", .data = &imx6sx_pcie_data}, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, imx6_pcie_of_match); > + Why are you moving the match table? This seems like unnecessary churn to me. > +#ifdef CONFIG_PM_SLEEP > +static int pci_imx_suspend(void) > +{ > + if (is_imx6sx_pcie(imx6_pcie)) { > + /* PM_TURN_OFF */ > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > + BIT(16), 1 << 16); > + udelay(10); > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > + BIT(16), 0 << 16); Magic numbers here. Please add defines for those. > + } > + > + return 0; > +} > + > +static void pci_imx_resume(void) > +{ > + struct pcie_port *pp = &imx6_pcie->pp; > + > + if (is_imx6sx_pcie(imx6_pcie)) { > + /* reset iMX6SX PCIe */ > + regmap_update_bits(imx6_pcie->iomuxc_gpr, > + IOMUXC_GPR5, BIT(18), 1 << 18); > + > + regmap_update_bits(imx6_pcie->iomuxc_gpr, > + IOMUXC_GPR5, BIT(18), 0 << 18); > + Again magic numbers here. Please add defines for those. > + /* > + * controller maybe turn off, re-configure again > + * Set the CLASS_REV of RC CFG header to > + * PCI_CLASS_BRIDGE_PCI > + */ > + writel(readl(pp->dbi_base + PCI_CLASS_REVISION) > + | (PCI_CLASS_BRIDGE_PCI << 16), > + pp->dbi_base + PCI_CLASS_REVISION); > + Can't we just move the call to set this from dw_pcie_host_init() to dw_pcie_setup_rc() so we don't need to do this ourselves? It seems to be the more logical change. > + dw_pcie_setup_rc(pp); > + } > +} > + > +static struct syscore_ops pci_imx_syscore_ops = { > + .suspend = pci_imx_suspend, > + .resume = pci_imx_resume, > +}; > +#endif > + Why does this need to be syscore_ops instead of dev_pm_ops? > static int __init imx6_pcie_probe(struct platform_device *pdev) > { > - struct imx6_pcie *imx6_pcie; > struct pcie_port *pp; > + const struct of_device_id *of_id = > + of_match_device(imx6_pcie_of_match, &pdev->dev); > struct device_node *np = pdev->dev.of_node; > struct resource *dbi_base; > int ret; > @@ -560,6 +680,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) > > pp = &imx6_pcie->pp; > pp->dev = &pdev->dev; > + imx6_pcie->data = of_id->data; > > /* Added for PCI abort handling */ > hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0, > @@ -603,9 +724,19 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) > return PTR_ERR(imx6_pcie->pcie); > } > > - /* Grab GPR config register range */ > - imx6_pcie->iomuxc_gpr = > - syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); > + if (is_imx6sx_pcie(imx6_pcie)) { > + imx6_pcie->pcie_regulator = devm_regulator_get(pp->dev, "pcie"); > + > + imx6_pcie->iomuxc_gpr = > + syscon_regmap_lookup_by_compatible > + ("fsl,imx6sx-iomuxc-gpr"); > + imx6_pcie->gpc_ips_reg = > + syscon_regmap_lookup_by_compatible("fsl,imx6sx-gpc"); > + } else { > + imx6_pcie->iomuxc_gpr = > + syscon_regmap_lookup_by_compatible > + ("fsl,imx6q-iomuxc-gpr"); > + } > if (IS_ERR(imx6_pcie->iomuxc_gpr)) { > dev_err(&pdev->dev, "unable to find iomuxc registers\n"); > return PTR_ERR(imx6_pcie->iomuxc_gpr); > @@ -616,6 +747,9 @@ static int __init imx6_pcie_probe(struct platform_device *pdev) > return ret; > > platform_set_drvdata(pdev, imx6_pcie); > +#ifdef CONFIG_PM_SLEEP > + register_syscore_ops(&pci_imx_syscore_ops); > +#endif > return 0; > } > > @@ -627,12 +761,6 @@ static void imx6_pcie_shutdown(struct platform_device *pdev) > imx6_pcie_assert_core_reset(&imx6_pcie->pp); > } > > -static const struct of_device_id imx6_pcie_of_match[] = { > - { .compatible = "fsl,imx6q-pcie", }, > - {}, > -}; > -MODULE_DEVICE_TABLE(of, imx6_pcie_of_match); > - > static struct platform_driver imx6_pcie_driver = { > .driver = { > .name = "imx6q-pcie", -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support 2014-09-23 11:00 ` Lucas Stach @ 2014-09-24 7:09 ` Hong-Xing.Zhu 2014-09-24 9:46 ` Lucas Stach 0 siblings, 1 reply; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-24 7:09 UTC (permalink / raw) To: Lucas Stach Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, festevam@gmail.com, tharvey@gateworks.com DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIz LCAyMDE0IDc6MDAgUE0NCj4gVG86IFpodSBSaWNoYXJkLVI2NTAzNw0KPiBDYzogbGludXgtcGNp LW93bmVyQHZnZXIua2VybmVsLm9yZzsgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZzsgR3VvIFNo YXduLQ0KPiBSNjUwNzM7IGZlc3RldmFtQGdtYWlsLmNvbTsgdGhhcnZleUBnYXRld29ya3MuY29t DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgNS81XSBQQ0k6IGlteDY6IGFkZCBpbXg2c3ggcGNp ZSBzdXBwb3J0DQo+IA0KPiBBbSBEaWVuc3RhZywgZGVuIDIzLjA5LjIwMTQsIDEyOjExICswODAw IHNjaHJpZWIgUmljaGFyZCBaaHU6DQo+ID4gLSBpbXg2c3ggcGNpZSBoYXMgaXRzIG93biBzdGFu ZGFsb25lIHBjaWUgcG93ZXIgc3VwcGx5Lg0KPiA+IEluIG9yZGVyIHRvIHR1cm4gb24gdGhlIGlt eDZzeCBwY2llIHBvd2VyIGR1cmluZyBpbml0aWFsaXphdGlvbi4gQWRkDQo+ID4gdGhlIHBjaWUg cmVndWxhdG9yIGFuZCB0aGUgZ3BjIHJlZ21hcCBpbnRvIHRoZSBpbXg2c3ggcGNpZSBzdHJ1Y3R1 cmUuDQo+ID4gLSBpbXg2c3ggcGNpZSBoYXMgdGhlIG5ldyBhZGRlZCByZXNldCBtZWNoYW5pc20s IGFkZCB0aGUgcmVzZXQNCj4gPiBvcGVyYXRpb25zIGludG8gdGhlIGluaXRpYWxpemF0aW9uLg0K PiA+IC0gUmVnaXN0ZXIgb25lIFBNIGNhbGwtYmFjaywgZW50ZXIvZXhpdCBMMiBzdGF0ZSBvZiB0 aGUgQVNQTSBkdXJpbmcNCj4gPiBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUuDQo+ID4NCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBSaWNoYXJkIFpodSA8cjY1MDM3QGZyZWVzY2FsZS5jb20+DQo+ID4gLS0tDQo+ ID4gIGRyaXZlcnMvcGNpL2hvc3QvcGNpLWlteDYuYyB8IDE2NA0KPiA+ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxNDYg aW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktaW14Ni5jDQo+ ID4gaW5kZXggYmM0MjIyYi4uOTllY2I1ZCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9o b3N0L3BjaS1pbXg2LmMNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1pbXg2LmMNCj4g PiBAQCAtMTgsMTIgKzE4LDE2IEBADQo+ID4gICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+ DQo+ID4gICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uL2lteDZxLWlvbXV4Yy1ncHIuaD4NCj4g PiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRk cmVzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gICNpbmNsdWRl IDxsaW51eC9vZl9ncGlvLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiAgI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvcmVn bWFwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCj4gPiAg I2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9zaWduYWwu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+DQo+ID4gICNpbmNsdWRlIDxs aW51eC90eXBlcy5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4NCj4g PiBAQCAtMzEsMTUgKzM1LDMwIEBADQo+ID4NCj4gPiAgI2RlZmluZSB0b19pbXg2X3BjaWUoeCkJ Y29udGFpbmVyX29mKHgsIHN0cnVjdCBpbXg2X3BjaWUsIHBwKQ0KPiA+DQo+ID4gKy8qIFRoZSBw Y2llIHdobyBoYXZlIHN0YW5kYWxvbmUgcG93ZXIgZG9tYWluICovDQo+ID4gKyNkZWZpbmUgUENJ RV9QSFlfSEFTX1BXUl9ET01BSU4JCUJJVCgwKQ0KPiA+ICsNCj4gPiArc3RydWN0IGlteF9wY2ll X2RhdGEgew0KPiA+ICsJdW5zaWduZWQgaW50IGZsYWdzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfcGNpZV9kYXRhIGlteDZzeF9wY2llX2RhdGEgPSB7DQo+ ID4gKwkuZmxhZ3MgPSBQQ0lFX1BIWV9IQVNfUFdSX0RPTUFJTiwNCj4gPiArfTsNCj4gPiArDQo+ IA0KPiBZb3UgZG9uJ3QgdXNlIHRoaXMgZmxhZyBhbnl3aGVyZSBlbHNlIHNvIGFsbCB0aGUgYWJv dmUgaXMgbm90IG5lZWRlZCBpZiB5b3UNCj4gcmV3cml0ZSB0aGUgYmVsb3cuLi4NCltSaWNoYXJk XSBZb3VyIHN1Z2dlc3QgaXMgZ3JlYXQsIHRoYW5rcy4NCj4gDQo+ID4gIHN0cnVjdCBpbXg2X3Bj aWUgew0KPiA+ICAJaW50CQkJcmVzZXRfZ3BpbzsNCj4gPiArCWNvbnN0IHN0cnVjdAkJaW14X3Bj aWVfZGF0YSAqZGF0YTsNCj4gPiAgCXN0cnVjdCBjbGsJCSpwY2llX2J1czsNCj4gPiAgCXN0cnVj dCBjbGsJCSpwY2llX3BoeTsNCj4gPiAgCXN0cnVjdCBjbGsJCSpwY2llOw0KPiA+ICAJc3RydWN0 IHBjaWVfcG9ydAlwcDsNCj4gPiAgCXN0cnVjdCByZWdtYXAJCSppb211eGNfZ3ByOw0KPiA+ICsJ c3RydWN0IHJlZ21hcAkJKmdwY19pcHNfcmVnOw0KPiA+ICsJc3RydWN0IHJlZ3VsYXRvcgkqcGNp ZV9yZWd1bGF0b3I7DQo+ID4gIAl2b2lkIF9faW9tZW0JCSptZW1fYmFzZTsNCj4gPiAgfTsNCj4g PiArc3RhdGljIHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZTsNCj4gPg0KPiA+ICAvKiBQQ0ll IFJvb3QgQ29tcGxleCByZWdpc3RlcnMgKG1lbW9yeS1tYXBwZWQpICovDQo+ID4gICNkZWZpbmUg UENJRV9SQ19MQ1IJCQkJMHg3Yw0KPiA+IEBAIC03Nyw2ICs5NiwxMSBAQCBzdHJ1Y3QgaW14Nl9w Y2llIHsNCj4gPiAgI2RlZmluZSBQSFlfUlhfT1ZSRF9JTl9MT19SWF9EQVRBX0VOICgxIDw8IDUp ICAjZGVmaW5lDQo+ID4gUEhZX1JYX09WUkRfSU5fTE9fUlhfUExMX0VOICgxIDw8IDMpDQo+ID4N Cj4gPiArc3RhdGljIGlubGluZSBib29sIGlzX2lteDZzeF9wY2llKHN0cnVjdCBpbXg2X3BjaWUg KmlteDZfcGNpZSkgew0KPiA+ICsJcmV0dXJuIGlteDZfcGNpZS0+ZGF0YSA9PSAmaW14NnN4X3Bj aWVfZGF0YTsNCj4gDQo+IC4uLiB0byByZXR1cm4gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAs ICJmc2wsaW14NnN4LXBjaWUiKTsNCj4gDQpbUmljaGFyZF0gRXhhY3RseSwgdGhhbmtzLg0KPiA+ ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50IHBjaWVfcGh5X3BvbGxfYWNrKHZvaWQgX19pb21l bSAqZGJpX2Jhc2UsIGludCBleHBfdmFsKSAgew0KPiA+ICAJdTMyIHZhbDsNCj4gPiBAQCAtMjc1 LDExICsyOTksMTcgQEAgc3RhdGljIGludCBpbXg2X3BjaWVfZGVhc3NlcnRfY29yZV9yZXNldChz dHJ1Y3QNCj4gcGNpZV9wb3J0ICpwcCkNCj4gPiAgCQlnb3RvIGVycl9wY2llOw0KPiA+ICAJfQ0K PiA+DQo+ID4gLQkvKiBwb3dlciB1cCBjb3JlIHBoeSBhbmQgZW5hYmxlIHJlZiBjbG9jayAqLw0K PiA+IC0JcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQ UjEsDQo+ID4gLQkJCUlNWDZRX0dQUjFfUENJRV9URVNUX1BELCAwIDw8IDE4KTsNCj4gPiAtCXJl Z21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxLA0KPiA+ IC0JCQlJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19FTiwgMSA8PCAxNik7DQo+ID4gKwlpZiAoaXNf aW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhpbXg2 X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPiArCQkJCUlNWDZTWF9HUFIxMl9Q Q0lFX1RFU1RfUEQsDQo+ID4gKwkJCQlJTVg2U1hfR1BSMTJfUENJRV9URVNUX1BEX0NMUik7DQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCS8qIHBvd2VyIHVwIGNvcmUgcGh5IGFuZCBlbmFibGUgcmVm IGNsb2NrICovDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dw ciwgSU9NVVhDX0dQUjEsDQo+ID4gKwkJCQlJTVg2UV9HUFIxX1BDSUVfVEVTVF9QRCwgMCA8PCAx OCk7DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9N VVhDX0dQUjEsDQo+ID4gKwkJCQlJTVg2UV9HUFIxX1BDSUVfUkVGX0NMS19FTiwgMSA8PCAxNik7 DQo+ID4gKwl9DQo+ID4NCj4gPiAgCS8qIGFsbG93IHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplICov DQo+ID4gIAl1c2xlZXBfcmFuZ2UoMjAwLCA1MDApOw0KPiA+IEBAIC0yOTAsNiArMzIwLDE4IEBA IHN0YXRpYyBpbnQgaW14Nl9wY2llX2RlYXNzZXJ0X2NvcmVfcmVzZXQoc3RydWN0DQo+IHBjaWVf cG9ydCAqcHApDQo+ID4gIAkJbXNsZWVwKDEwMCk7DQo+ID4gIAkJZ3Bpb19zZXRfdmFsdWUoaW14 Nl9wY2llLT5yZXNldF9ncGlvLCAxKTsNCj4gPiAgCX0NCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJ ICogaU1YNlNYIFBDSWUgaGFzIHRoZSBzdGFuZC1hbG9uZSBwb3dlciBkb21haW4uDQo+ID4gKwkg KiByZWZlciB0byB0aGUgaW5pdGlhbGl6YXRpb24gZm9yIGlNWDZTWCBQQ0llLA0KPiA+ICsJICog cmVsZWFzZSB0aGUgUENJZSBQSFkgcmVzZXQgaGVyZSwNCj4gPiArCSAqIGJlZm9yZSBMVFNTTSBl bmFibGUgaXMgc2V0Lg0KPiA+ICsJICovDQo+IA0KPiBUaGlzIGNvbW1lbnQgaXMgY29uZnVzaW5n LiBJIGRvbid0IHNlZSBob3cgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlDQo+IHBv d2VyLWRvbWFpbi4gSXQgc2hvdWxkIHJlYWQgc29tZXRoaW5nIGxpa2UgIlJlbGVhc2UgdGhlIFBI WSByZXNldCwgdGhhdCB3ZQ0KPiBoYXZlIHNldCBpbiBpbXg2X3BjaWVfaW5pdF9waHkoKSBub3cu Ig0KW1JpY2hhcmRdT2suDQo+IA0KPiA+ICsJaWYgKGlzX2lteDZzeF9wY2llKGlteDZfcGNpZSkp DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhD X0dQUjUsDQo+ID4gKwkJCQlJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4gPiArCQkJCUlNWDZT WF9HUFI1X1BDSUVfQlROUlNUX0NMUik7DQo+ID4gKw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4NCj4g PiAgZXJyX3BjaWU6DQo+ID4gQEAgLTMwNCwxNSArMzQ2LDM4IEBAIGVycl9wY2llX3BoeToNCj4g PiAgc3RhdGljIHZvaWQgaW14Nl9wY2llX2luaXRfcGh5KHN0cnVjdCBwY2llX3BvcnQgKnBwKSAg ew0KPiA+ICAJc3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llID0gdG9faW14Nl9wY2llKHBwKTsN Cj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIGlNWDZTWCBQQ0llIGhh cyB0aGUgc3RhbmQtYWxvbmUgcG93ZXIgZG9tYWluDQo+ID4gKwkgKiBhZGQgdGhlIGluaXRpYWxp emF0aW9uIGhlcmUgZm9yIGlNWDZTWCBQQ0llLg0KPiA+ICsJICovDQo+IA0KPiBBZ2FpbiB0aGlz IGNvdWxkIGJlIHBocmFzZWQgYmV0dGVyOiAiUG93ZXIgdXAgdGhlIHNlcGFyYXRlIGRvbWFpbiBh dmFpbGFibGUgb24NCj4gaS5NWDZTWCINCltSaWNoYXJkXSBPay4NCj4gDQo+ID4gKwlpZiAoaXNf aW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ICsJCS8qIEZvcmNlIFBDSWUgUEhZIHJlc2V0 ICovDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9N VVhDX0dQUjUsDQo+ID4gKwkJCQlJTVg2U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4gPiArCQkJCUlN WDZTWF9HUFI1X1BDSUVfQlROUlNUKTsNCj4gPiArDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRz KGlteDZfcGNpZS0+Z3BjX2lwc19yZWcsIDAsIDEgPDwgNywgMSA8PCA3KTsNCj4gDQo+IE1hZ2lj IHZhbHVlcyBoZXJlLiBBbHNvIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBuZWVkIHRvIGFjY2Vz cyBncGNfaXBzX3JlZy4NCj4gU28gaWYgdGhpcyBpcyBhIHByZXJlcXVpc2l0ZSB0byBlbmFibGlu ZyB0aGUgQU5BVE9QIHJlZ3VsYXRvciwgSSB3b3VsZCBhcmd1ZQ0KPiBpdCBzaG91bGQgYmUgZG9u ZSBpbiB0aGUgcmVndWxhdG9yIGRyaXZlci4NCltSaWNoYXJkXU1hZ2ljIHZhbHVlcyB3b3VsZCBi ZSByZXBsYWNlZC4NClllcywgdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIG5lZWQgdG8gYWNjZXNz IGdwY19pcHNfcmVnLg0KSXQncyBhIGxpdHRsZSBjb21wbGV4IHRvIGFkZCB0aGUgR1BDIG1hbmlw dWxhdGlvbnMgaW4NCiBBTkFUT1AvcmVndWxhdG9yIGZyYW1ld29yay9kcml2ZXIgY29kZXMuDQpT aW5jZSBBTkFUT1AgcmVndWxhdG9yIGlzIGNvbW1vbiBmcmFtZXdvcmsgYW5kIGRyaXZlciwgaXQn cyBoYXJkIHRvIG1hbmlwdWxhdGUNCkdQQyBiaXRzIGluIEFOQVRPUC9yZWd1bGF0b3IgZHJpdmVy Lg0KSW4gb3JkZXIgdG8gYmUgZWFzaWVyLCBJIGFkZCB0aGUgR1BDIGJpdHMgbWFuaXB1bGF0aW9u IGhlcmUgZGlyZWN0bHkuDQpIb3cgZG8geW91IHRoaW5rIGFib3V0IHRoYXQ/DQo+IA0KPiA+ICsJ CS8qIFBvd2VyIHVwIFBDSWUgUEhZLCBBTkFUT1BfUkVHX0NPUkUgb2Zmc2V0IDB4MTQwLCBiaXQx My05ICovDQo+IA0KPiBPaCBzbyB0aGlzIGlzIGFjdHVhbGx5IGEgUEhZIHJlZ3VsYXRvciwgbm90 IGZlZWRpbmcgdGhlIHdob2xlIGNvcmUsIGJ1dCBqdXN0DQo+IHRoZSBQSFk/IFlvdSBjb3VsZCBy ZW1vdmUgdGhlIGNvbW1lbnQgaXQgaXMgY2xlYXIgd2hhdCB5b3UgYXJlIGRvaW5nIGZyb20gdGhl DQo+IGNvZGUgYW5kIHRoZSBvZmZzZXRzIGFyZSBvZiBubyBpbnRlcmVzdCBpbiB0aGUgUENJZSBk cml2ZXIuDQpbUmljaGFyZF0geWVzLCBpdCBpcyBhIFBIWSByZWd1bGF0b3IsIG5vdCB1c2VkIHRv IGZlZWQgdGhlIHdob2xlIGNvcmUuDQpPaywgdGhlIGNvbW1lbnQgd291bGQgYmUgcmVtb3ZlZC4N Cj4gDQo+ID4gKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGlteDZfcGNpZS0+cGNpZV9yZWd1bGF0 b3IsDQo+ID4gKwkJCQkxMTAwMDAwLCAxMTAwMDAwKTsNCj4gPiArCQlyZXQgPSByZWd1bGF0b3Jf ZW5hYmxlKGlteDZfcGNpZS0+cGNpZV9yZWd1bGF0b3IpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4g KwkJCWRldl9pbmZvKHBwLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHBjaWUgcmVndWxhdG9yLlxu Iik7DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9N VVhDX0dQUjEyLA0KPiA+ICsJCQkJSU1YNlNYX0dQUjEyX1JYX0VRX01BU0ssIElNWDZTWF9HUFIx Ml9SWF9FUV8yKTsNCj4gPiArCX0NCj4gPg0KPiA+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZf cGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPiA+IC0JCQlJTVg2UV9HUFIxMl9QQ0lF X0NUTF8yLCAwIDw8IDEwKTsNCj4gPiArCQkJSU1YNlFfR1BSMTJfUENJRV9DVExfMiwNCj4gPiAr CQkJSU1YNlFfR1BSMTJfUENJRV9DVExfMl9DTFIpOw0KPiA+DQo+ID4gIAkvKiBjb25maWd1cmUg Y29uc3RhbnQgaW5wdXQgc2lnbmFsIHRvIHRoZSBwY2llIGN0cmwgYW5kIHBoeSAqLw0KPiA+ICAJ cmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0K PiA+ICAJCQlJTVg2UV9HUFIxMl9ERVZJQ0VfVFlQRSwgUENJX0VYUF9UWVBFX1JPT1RfUE9SVCA8 PCAxMik7DQo+ID4gIAlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJ T01VWENfR1BSMTIsDQo+ID4gLQkJCUlNWDZRX0dQUjEyX0xPU19MRVZFTCwgOSA8PCA0KTsNCj4g PiArCQkJSU1YNlFfR1BSMTJfTE9TX0xFVkVMLCBJTVg2UV9HUFIxMl9MT1NfTEVWRUxfOSk7DQo+ ID4NCj4gPiAgCXJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVY Q19HUFI4LA0KPiA+ICAJCQlJTVg2UV9HUFI4X1RYX0RFRU1QSF9HRU4xLCAwIDw8IDApOyBAQCAt MzcwLDcgKzQzNSw4IEBAIHN0YXRpYw0KPiBpbnQNCj4gPiBpbXg2X3BjaWVfc3RhcnRfbGluayhz dHJ1Y3QgcGNpZV9wb3J0ICpwcCkNCj4gPg0KPiA+ICAJLyogU3RhcnQgTFRTU00uICovDQo+ID4g IAlyZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIs DQo+ID4gLQkJCUlNWDZRX0dQUjEyX1BDSUVfQ1RMXzIsIDEgPDwgMTApOw0KPiA+ICsJCQlJTVg2 UV9HUFIxMl9QQ0lFX0NUTF8yLA0KPiA+ICsJCQlJTVg2UV9HUFIxMl9QQ0lFX0NUTF8yKTsNCj4g Pg0KPiA+ICAJcmV0ID0gaW14Nl9wY2llX3dhaXRfZm9yX2xpbmsocHApOw0KPiA+ICAJaWYgKHJl dCkNCj4gPiBAQCAtNTQ2LDEwICs2MTIsNjQgQEAgc3RhdGljIGludCBfX2luaXQgaW14Nl9hZGRf cGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQNCj4gKnBwLA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4g IH0NCj4gPg0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXg2X3BjaWVf b2ZfbWF0Y2hbXSA9IHsNCj4gPiArCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXBjaWUiLCB9 LA0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LXBjaWUiLCAuZGF0YSA9ICZpbXg2 c3hfcGNpZV9kYXRhfSwNCj4gPiArCXt9LA0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBpbXg2X3BjaWVfb2ZfbWF0Y2gpOw0KPiA+ICsNCj4gDQo+IFdoeSBhcmUgeW91IG1v dmluZyB0aGUgbWF0Y2ggdGFibGU/IFRoaXMgc2VlbXMgbGlrZSB1bm5lY2Vzc2FyeSBjaHVybiB0 byBtZS4NCltSaWNoYXJkXSBpdCBpcyB1c2VkIGJ5IF9wcm9iZSBpbiB2MiBwYXRjaC1zZXQuIENo YW5nZXMgd291bGQgYmUgZGlzY2FyZGVkIGluIG5leHQgdmVyc2lvbiBwYXRjaC1zZXQuDQo+IA0K PiA+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQDQo+ID4gK3N0YXRpYyBpbnQgcGNpX2lteF9zdXNw ZW5kKHZvaWQpDQo+ID4gK3sNCj4gPiArCWlmIChpc19pbXg2c3hfcGNpZShpbXg2X3BjaWUpKSB7 DQo+ID4gKwkJLyogUE1fVFVSTl9PRkYgKi8NCj4gPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoaW14 Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4gKwkJCQlCSVQoMTYpLCAxIDw8 IDE2KTsNCj4gPiArCQl1ZGVsYXkoMTApOw0KPiA+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhpbXg2 X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPiArCQkJCUJJVCgxNiksIDAgPDwg MTYpOw0KPiANCj4gTWFnaWMgbnVtYmVycyBoZXJlLiBQbGVhc2UgYWRkIGRlZmluZXMgZm9yIHRo b3NlLg0KW1JpY2hhcmRdIE9rLg0KPiANCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcGNpX2lteF9yZXN1bWUodm9pZCkNCj4g PiArew0KPiA+ICsJc3RydWN0IHBjaWVfcG9ydCAqcHAgPSAmaW14Nl9wY2llLT5wcDsNCj4gPiAr DQo+ID4gKwlpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ICsJCS8qIHJlc2V0 IGlNWDZTWCBQQ0llICovDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9t dXhjX2dwciwNCj4gPiArCQkJCUlPTVVYQ19HUFI1LCBCSVQoMTgpLCAxIDw8IDE4KTsNCj4gPiAr DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiAr CQkJCUlPTVVYQ19HUFI1LCBCSVQoMTgpLCAwIDw8IDE4KTsNCj4gPiArDQo+IA0KPiBBZ2FpbiBt YWdpYyBudW1iZXJzIGhlcmUuIFBsZWFzZSBhZGQgZGVmaW5lcyBmb3IgdGhvc2UuDQpbUmljaGFy ZF0gT2suDQo+IA0KPiA+ICsJCS8qDQo+ID4gKwkJICogY29udHJvbGxlciBtYXliZSB0dXJuIG9m ZiwgcmUtY29uZmlndXJlIGFnYWluDQo+ID4gKwkJICogU2V0IHRoZSBDTEFTU19SRVYgb2YgUkMg Q0ZHIGhlYWRlciB0bw0KPiA+ICsJCSAqIFBDSV9DTEFTU19CUklER0VfUENJDQo+ID4gKwkJICov DQo+ID4gKwkJd3JpdGVsKHJlYWRsKHBwLT5kYmlfYmFzZSArIFBDSV9DTEFTU19SRVZJU0lPTikN Cj4gPiArCQkJfCAoUENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgMTYpLA0KPiA+ICsJCQlwcC0+ZGJp X2Jhc2UgKyBQQ0lfQ0xBU1NfUkVWSVNJT04pOw0KPiA+ICsNCj4gDQo+IENhbid0IHdlIGp1c3Qg bW92ZSB0aGUgY2FsbCB0byBzZXQgdGhpcyBmcm9tIGR3X3BjaWVfaG9zdF9pbml0KCkgdG8NCj4g ZHdfcGNpZV9zZXR1cF9yYygpIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBvdXJzZWx2ZXM/ IEl0IHNlZW1zIHRvIGJlIHRoZQ0KPiBtb3JlIGxvZ2ljYWwgY2hhbmdlLg0KW1JpY2hhcmRdZHdf cGNpZV9ob3N0X2luaXQgY29udGFpbnMgdGhlIHdob2xlIHJlLWluaXRpYWxpemF0aW9uIGFuZCBy ZS1saW5rLXVwDQogYWdhaW4gb2YgdGhlIHBjaWUgbW9kdWxlLiBJdCdzIG5vdCBwcm9wZXIgdG8g cmUtY2FsbCBkd19wY2llX2hvc3RfaW5pdCgpLg0KSSBmaW5kIHRoYXQgdGhlIG1zaSBpbml0IHNo b3VsZCBiZSByZS1jb25maWd1cmVkIGFnYWluIGFmdGVyIHJlc3VtZSBiYWNrLg0KU28sIHRoZSBk ZWZpbml0aW9ucyBvZiB0aGUgIlBDSUVfTVNJX0FERFJfTE8iIGFuZCAiUENJRV9NU0lfQUREUl9I SSIgd291bGQgYmUgdXNlZA0KaGVyZS4NCg0KQlRXLCBkbyB5b3Uga25vdyB3aHkgdGhlICIvKiBT eW5vcHNpcyBzcGVjaWZpYyBQQ0lFIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovIg0KaXMgbm90 IGRlZmluZWQgaW4gcGNpZS1kZXNpZ253YXJlLmgsIGJ1dCBpbiBwY2llLWRlc2lnbndhcmUuYz8N Cg0KPiANCj4gPiArCQlkd19wY2llX3NldHVwX3JjKHBwKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwY2lfaW14X3N5c2NvcmVfb3BzID0g ew0KPiA+ICsJLnN1c3BlbmQgPSBwY2lfaW14X3N1c3BlbmQsDQo+ID4gKwkucmVzdW1lID0gcGNp X2lteF9yZXN1bWUsDQo+ID4gK307DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gDQo+IFdoeSBkb2Vz IHRoaXMgbmVlZCB0byBiZSBzeXNjb3JlX29wcyBpbnN0ZWFkIG9mIGRldl9wbV9vcHM/DQpbUmlj aGFyZF0gUE1fVFVSTl9PRkYgbXNnIHNob3VsZCBiZSBzZW50IG91dCBhdCB0aGUgZW5kIG9mIHRo ZSBzdXNwZW5kIG9mIHBjaWUgc3Vic3lzdGVtLg0KUmVzdW1lIGFuZCByZS1jb25maWd1cmUgb2Yg cmMgY29udHJvbGxlciBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIHJlc3VtZSBvZiBwY2llIHN1 YnN5c3RlbS4NClNvLCBzeXNjb3JlX29wcyBpcyB1c2VkIGhlcmUuDQo+IA0KPiA+ICBzdGF0aWMg aW50IF9faW5pdCBpbXg2X3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikg IHsNCj4gPiAtCXN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZTsNCj4gPiAgCXN0cnVjdCBwY2ll X3BvcnQgKnBwOw0KPiA+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQgPQ0KPiA+ ICsJCQlvZl9tYXRjaF9kZXZpY2UoaW14Nl9wY2llX29mX21hdGNoLCAmcGRldi0+ZGV2KTsNCj4g PiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4gPiAgCXN0 cnVjdCByZXNvdXJjZSAqZGJpX2Jhc2U7DQo+ID4gIAlpbnQgcmV0Ow0KPiA+IEBAIC01NjAsNiAr NjgwLDcgQEAgc3RhdGljIGludCBfX2luaXQgaW14Nl9wY2llX3Byb2JlKHN0cnVjdA0KPiA+IHBs YXRmb3JtX2RldmljZSAqcGRldikNCj4gPg0KPiA+ICAJcHAgPSAmaW14Nl9wY2llLT5wcDsNCj4g PiAgCXBwLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJaW14Nl9wY2llLT5kYXRhID0gb2ZfaWQt PmRhdGE7DQo+ID4NCj4gPiAgCS8qIEFkZGVkIGZvciBQQ0kgYWJvcnQgaGFuZGxpbmcgKi8NCj4g PiAgCWhvb2tfZmF1bHRfY29kZSgxNiArIDYsIGlteDZxX3BjaWVfYWJvcnRfaGFuZGxlciwgU0lH QlVTLCAwLCBAQA0KPiA+IC02MDMsOSArNzI0LDE5IEBAIHN0YXRpYyBpbnQgX19pbml0IGlteDZf cGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlDQo+ICpwZGV2KQ0KPiA+ICAJCXJldHVy biBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZSk7DQo+ID4gIAl9DQo+ID4NCj4gPiAtCS8qIEdyYWIg R1BSIGNvbmZpZyByZWdpc3RlciByYW5nZSAqLw0KPiA+IC0JaW14Nl9wY2llLT5pb211eGNfZ3By ID0NCj4gPiAtCQkgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZSgiZnNsLGlteDZx LWlvbXV4Yy1ncHIiKTsNCj4gPiArCWlmIChpc19pbXg2c3hfcGNpZShpbXg2X3BjaWUpKSB7DQo+ ID4gKwkJaW14Nl9wY2llLT5wY2llX3JlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX2dldChwcC0+ ZGV2LCAicGNpZSIpOw0KPiA+ICsNCj4gPiArCQlpbXg2X3BjaWUtPmlvbXV4Y19ncHIgPQ0KPiA+ ICsJCQkgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfY29tcGF0aWJsZQ0KPiA+ICsJCQkgKCJmc2ws aW14NnN4LWlvbXV4Yy1ncHIiKTsNCj4gPiArCQlpbXg2X3BjaWUtPmdwY19pcHNfcmVnID0NCj4g PiArCQkJIHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoImZzbCxpbXg2c3gtZ3Bj Iik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWlteDZfcGNpZS0+aW9tdXhjX2dwciA9DQo+ID4g KwkJCXN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUNCj4gPiArCQkJKCJmc2wsaW14 NnEtaW9tdXhjLWdwciIpOw0KPiA+ICsJfQ0KPiA+ICAJaWYgKElTX0VSUihpbXg2X3BjaWUtPmlv bXV4Y19ncHIpKSB7DQo+ID4gIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGZpbmQg aW9tdXhjIHJlZ2lzdGVyc1xuIik7DQo+ID4gIAkJcmV0dXJuIFBUUl9FUlIoaW14Nl9wY2llLT5p b211eGNfZ3ByKTsgQEAgLTYxNiw2ICs3NDcsOSBAQCBzdGF0aWMNCj4gPiBpbnQgX19pbml0IGlt eDZfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJCXJldHVy biByZXQ7DQo+ID4NCj4gPiAgCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlteDZfcGNpZSk7 DQo+ID4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gPiArCXJlZ2lzdGVyX3N5c2NvcmVfb3Bz KCZwY2lfaW14X3N5c2NvcmVfb3BzKTsNCj4gPiArI2VuZGlmDQo+ID4gIAlyZXR1cm4gMDsNCj4g PiAgfQ0KPiA+DQo+ID4gQEAgLTYyNywxMiArNzYxLDYgQEAgc3RhdGljIHZvaWQgaW14Nl9wY2ll X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UNCj4gKnBkZXYpDQo+ID4gIAlpbXg2X3Bj aWVfYXNzZXJ0X2NvcmVfcmVzZXQoJmlteDZfcGNpZS0+cHApOw0KPiA+ICB9DQo+ID4NCj4gPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14Nl9wY2llX29mX21hdGNoW10gPSB7 DQo+ID4gLQl7IC5jb21wYXRpYmxlID0gImZzbCxpbXg2cS1wY2llIiwgfSwNCj4gPiAtCXt9LA0K PiA+IC19Ow0KPiA+IC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbXg2X3BjaWVfb2ZfbWF0Y2gp Ow0KPiA+IC0NCj4gPiAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14Nl9wY2llX2Ry aXZlciA9IHsNCj4gPiAgCS5kcml2ZXIgPSB7DQo+ID4gIAkJLm5hbWUJPSAiaW14NnEtcGNpZSIs DQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMgU3RhY2gg ICAgICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICB8IGh0dHA6 Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg0KQmVzdCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0K DQo= ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support 2014-09-24 7:09 ` Hong-Xing.Zhu @ 2014-09-24 9:46 ` Lucas Stach 2014-09-24 10:15 ` Hong-Xing.Zhu 0 siblings, 1 reply; 31+ messages in thread From: Lucas Stach @ 2014-09-24 9:46 UTC (permalink / raw) To: Hong-Xing.Zhu@freescale.com Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, festevam@gmail.com, tharvey@gateworks.com Am Mittwoch, den 24.09.2014, 07:09 +0000 schrieb Hong-Xing.Zhu@freescale.com: [...] > > > + if (is_imx6sx_pcie(imx6_pcie)) { > > > + /* Force PCIe PHY reset */ > > > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR5, > > > + IMX6SX_GPR5_PCIE_BTNRST, > > > + IMX6SX_GPR5_PCIE_BTNRST); > > > + > > > + regmap_update_bits(imx6_pcie->gpc_ips_reg, 0, 1 << 7, 1 << 7); > > > > Magic values here. Also this is the only time we need to access gpc_ips_reg. > > So if this is a prerequisite to enabling the ANATOP regulator, I would argue > > it should be done in the regulator driver. > [Richard]Magic values would be replaced. > Yes, this is the only time we need to access gpc_ips_reg. > It's a little complex to add the GPC manipulations in > ANATOP/regulator framework/driver codes. > Since ANATOP regulator is common framework and driver, it's hard to manipulate > GPC bits in ANATOP/regulator driver. > In order to be easier, I add the GPC bits manipulation here directly. > How do you think about that? I still think it would be better to handle this in the regulator driver. But as I don't yet have a reference manual for the imx6sx: can you please describe what this bit does exactly? Maybe this helps me to understand where the call should be placed. > > > > > + /* Power up PCIe PHY, ANATOP_REG_CORE offset 0x140, bit13-9 */ > > > > Oh so this is actually a PHY regulator, not feeding the whole core, but just > > the PHY? You could remove the comment it is clear what you are doing from the > > code and the offsets are of no interest in the PCIe driver. > [Richard] yes, it is a PHY regulator, not used to feed the whole core. Ok, so I expect this to be called "pcie-phy-supply" in the binding. > > > > > + regulator_set_voltage(imx6_pcie->pcie_regulator, > > > + 1100000, 1100000); > > > + ret = regulator_enable(imx6_pcie->pcie_regulator); > > > + if (ret) > > > + dev_info(pp->dev, "failed to enable pcie regulator.\n"); > > > + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > > > + IMX6SX_GPR12_RX_EQ_MASK, IMX6SX_GPR12_RX_EQ_2); > > > + } > > > > > > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > > > - IMX6Q_GPR12_PCIE_CTL_2, 0 << 10); > > > + IMX6Q_GPR12_PCIE_CTL_2, > > > + IMX6Q_GPR12_PCIE_CTL_2_CLR); > > > > > > /* configure constant input signal to the pcie ctrl and phy */ > > > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > > > IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12); > > > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, > > > - IMX6Q_GPR12_LOS_LEVEL, 9 << 4); > > > + IMX6Q_GPR12_LOS_LEVEL, IMX6Q_GPR12_LOS_LEVEL_9); > > > > > > regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8, > > > IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0); @@ -370,7 +435,8 @@ static [...] > > > +static void pci_imx_resume(void) > > > +{ > > > + struct pcie_port *pp = &imx6_pcie->pp; > > > + > > > + if (is_imx6sx_pcie(imx6_pcie)) { > > > + /* reset iMX6SX PCIe */ > > > + regmap_update_bits(imx6_pcie->iomuxc_gpr, > > > + IOMUXC_GPR5, BIT(18), 1 << 18); > > > + > > > + regmap_update_bits(imx6_pcie->iomuxc_gpr, > > > + IOMUXC_GPR5, BIT(18), 0 << 18); > > > + > > > > Again magic numbers here. Please add defines for those. > [Richard] Ok. > > > > > + /* > > > + * controller maybe turn off, re-configure again > > > + * Set the CLASS_REV of RC CFG header to > > > + * PCI_CLASS_BRIDGE_PCI > > > + */ > > > + writel(readl(pp->dbi_base + PCI_CLASS_REVISION) > > > + | (PCI_CLASS_BRIDGE_PCI << 16), > > > + pp->dbi_base + PCI_CLASS_REVISION); > > > + > > > > Can't we just move the call to set this from dw_pcie_host_init() to > > dw_pcie_setup_rc() so we don't need to do this ourselves? It seems to be the > > more logical change. > [Richard]dw_pcie_host_init contains the whole re-initialization and re-link-up > again of the pcie module. It's not proper to re-call dw_pcie_host_init(). > I find that the msi init should be re-configured again after resume back. > So, the definitions of the "PCIE_MSI_ADDR_LO" and "PCIE_MSI_ADDR_HI" would be used > here. > I seems you misunderstood my comment here. I'm not saying we should call dw_pcie_host_init() here, which would be clearly wrong. What I'm saying is that the call to set up the CLASS_REV register is currently done in dw_pcie_host_init(), but from a quick look at the code I think it is safe to move this call to dw_pcie_setup_rc(). If you move it to this function there would no need to do it explicitly from this resume hook again. > BTW, do you know why the "/* Synopsis specific PCIE configuration registers */" > is not defined in pcie-designware.h, but in pcie-designware.c? > Most probably because the setup for the DW PCIe core should be handled through pcie-designware.c and not through the individual SoC drivers. > > > > > + dw_pcie_setup_rc(pp); > > > + } > > > +} > > > + > > > +static struct syscore_ops pci_imx_syscore_ops = { > > > + .suspend = pci_imx_suspend, > > > + .resume = pci_imx_resume, > > > +}; > > > +#endif > > > + > > > > Why does this need to be syscore_ops instead of dev_pm_ops? > [Richard] PM_TURN_OFF msg should be sent out at the end of the suspend of pcie subsystem. > Resume and re-configure of rc controller should be done before the resume of pcie subsystem. > So, syscore_ops is used here. Ok, makes sense. Regards, Lucas -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support 2014-09-24 9:46 ` Lucas Stach @ 2014-09-24 10:15 ` Hong-Xing.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-24 10:15 UTC (permalink / raw) To: Lucas Stach Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, festevam@gmail.com, tharvey@gateworks.com DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEx1Y2FzIFN0YWNoIFttYWls dG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIg MjQsIDIwMTQgNTo0NiBQTQ0KPiBUbzogWmh1IFJpY2hhcmQtUjY1MDM3DQo+IENjOiBsaW51eC1w Y2ktb3duZXJAdmdlci5rZXJuZWwub3JnOyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBHdW8g U2hhd24tDQo+IFI2NTA3MzsgZmVzdGV2YW1AZ21haWwuY29tOyB0aGFydmV5QGdhdGV3b3Jrcy5j b20NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiA1LzVdIFBDSTogaW14NjogYWRkIGlteDZzeCBw Y2llIHN1cHBvcnQNCj4gDQo+IEFtIE1pdHR3b2NoLCBkZW4gMjQuMDkuMjAxNCwgMDc6MDkgKzAw MDAgc2NocmllYg0KPiBIb25nLVhpbmcuWmh1QGZyZWVzY2FsZS5jb206DQo+IA0KPiBbLi4uXQ0K PiANCj4gPiA+ID4gKwlpZiAoaXNfaW14NnN4X3BjaWUoaW14Nl9wY2llKSkgew0KPiA+ID4gPiAr CQkvKiBGb3JjZSBQQ0llIFBIWSByZXNldCAqLw0KPiA+ID4gPiArCQlyZWdtYXBfdXBkYXRlX2Jp dHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSNSwNCj4gPiA+ID4gKwkJCQlJTVg2 U1hfR1BSNV9QQ0lFX0JUTlJTVCwNCj4gPiA+ID4gKwkJCQlJTVg2U1hfR1BSNV9QQ0lFX0JUTlJT VCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+ Z3BjX2lwc19yZWcsIDAsIDEgPDwgNywgMSA8PCA3KTsNCj4gPiA+DQo+ID4gPiBNYWdpYyB2YWx1 ZXMgaGVyZS4gQWxzbyB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgbmVlZCB0byBhY2Nlc3MNCj4g Z3BjX2lwc19yZWcuDQo+ID4gPiBTbyBpZiB0aGlzIGlzIGEgcHJlcmVxdWlzaXRlIHRvIGVuYWJs aW5nIHRoZSBBTkFUT1AgcmVndWxhdG9yLCBJDQo+ID4gPiB3b3VsZCBhcmd1ZSBpdCBzaG91bGQg YmUgZG9uZSBpbiB0aGUgcmVndWxhdG9yIGRyaXZlci4NCj4gPiBbUmljaGFyZF1NYWdpYyB2YWx1 ZXMgd291bGQgYmUgcmVwbGFjZWQuDQo+ID4gWWVzLCB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2Ug bmVlZCB0byBhY2Nlc3MgZ3BjX2lwc19yZWcuDQo+ID4gSXQncyBhIGxpdHRsZSBjb21wbGV4IHRv IGFkZCB0aGUgR1BDIG1hbmlwdWxhdGlvbnMgaW4NCj4gPiBBTkFUT1AvcmVndWxhdG9yIGZyYW1l d29yay9kcml2ZXIgY29kZXMuDQo+ID4gU2luY2UgQU5BVE9QIHJlZ3VsYXRvciBpcyBjb21tb24g ZnJhbWV3b3JrIGFuZCBkcml2ZXIsIGl0J3MgaGFyZCB0bw0KPiA+IG1hbmlwdWxhdGUgR1BDIGJp dHMgaW4gQU5BVE9QL3JlZ3VsYXRvciBkcml2ZXIuDQo+ID4gSW4gb3JkZXIgdG8gYmUgZWFzaWVy LCBJIGFkZCB0aGUgR1BDIGJpdHMgbWFuaXB1bGF0aW9uIGhlcmUgZGlyZWN0bHkuDQo+ID4gSG93 IGRvIHlvdSB0aGluayBhYm91dCB0aGF0Pw0KPiANCj4gSSBzdGlsbCB0aGluayBpdCB3b3VsZCBi ZSBiZXR0ZXIgdG8gaGFuZGxlIHRoaXMgaW4gdGhlIHJlZ3VsYXRvciBkcml2ZXIuDQo+IEJ1dCBh cyBJIGRvbid0IHlldCBoYXZlIGEgcmVmZXJlbmNlIG1hbnVhbCBmb3IgdGhlIGlteDZzeDogY2Fu IHlvdSBwbGVhc2UNCj4gZGVzY3JpYmUgd2hhdCB0aGlzIGJpdCBkb2VzIGV4YWN0bHk/IE1heWJl IHRoaXMgaGVscHMgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZQ0KPiB0aGUgY2FsbCBzaG91bGQgYmUg cGxhY2VkLg0KW1JpY2hhcmRdIEhpIEx1Y2FzOg0KSGVyZSBpdCBpczoNCkJpdCA3IG9mIEdQQyBJ bnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAoR1BDX0NOVFIpLCBsb2NhdGVkIGluIEdlbmVyYWwg UG93ZXIgQ29udHJvbGxlcg0KDQpQQ0lFX1BIWV9QVVBfUkVRDQoNClBDSUUgUEhZIHBvd2VyIHVw IHJlcXVlc3QuIFNlbGYtY2xlYXIgYml0Lg0KTk9URTogU29mdHdhcmUgbWF5IGRpcmVjdGx5IGNv bnRyb2wgZGlzcGxheSBwb3dlciBnYXRlIGFuZCB1dGlsaXplIGhhcmR3YXJlIGNvbnRyb2wgZm9y IHJlc2V0IHNlcXVlbmNlLg0KMCDigJQgTm8gUmVxdWVzdA0KMSDigJQgUmVxdWVzdCBwb3dlciB1 cCBzZXF1ZW5jZQ0KPiANCj4gDQo+ID4gPg0KPiA+ID4gPiArCQkvKiBQb3dlciB1cCBQQ0llIFBI WSwgQU5BVE9QX1JFR19DT1JFIG9mZnNldCAweDE0MCwgYml0MTMtOSAqLw0KPiA+ID4NCj4gPiA+ IE9oIHNvIHRoaXMgaXMgYWN0dWFsbHkgYSBQSFkgcmVndWxhdG9yLCBub3QgZmVlZGluZyB0aGUg d2hvbGUgY29yZSwNCj4gPiA+IGJ1dCBqdXN0IHRoZSBQSFk/IFlvdSBjb3VsZCByZW1vdmUgdGhl IGNvbW1lbnQgaXQgaXMgY2xlYXIgd2hhdCB5b3UNCj4gPiA+IGFyZSBkb2luZyBmcm9tIHRoZSBj b2RlIGFuZCB0aGUgb2Zmc2V0cyBhcmUgb2Ygbm8gaW50ZXJlc3QgaW4gdGhlIFBDSWUNCj4gZHJp dmVyLg0KPiA+IFtSaWNoYXJkXSB5ZXMsIGl0IGlzIGEgUEhZIHJlZ3VsYXRvciwgbm90IHVzZWQg dG8gZmVlZCB0aGUgd2hvbGUgY29yZS4NCj4gDQo+IE9rLCBzbyBJIGV4cGVjdCB0aGlzIHRvIGJl IGNhbGxlZCAicGNpZS1waHktc3VwcGx5IiBpbiB0aGUgYmluZGluZy4NCltSaWNoYXJkXSBUaGFu a3MuDQo+IA0KPiA+ID4NCj4gPiA+ID4gKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGlteDZfcGNp ZS0+cGNpZV9yZWd1bGF0b3IsDQo+ID4gPiA+ICsJCQkJMTEwMDAwMCwgMTEwMDAwMCk7DQo+ID4g PiA+ICsJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoaW14Nl9wY2llLT5wY2llX3JlZ3VsYXRvcik7 DQo+ID4gPiA+ICsJCWlmIChyZXQpDQo+ID4gPiA+ICsJCQlkZXZfaW5mbyhwcC0+ZGV2LCAiZmFp bGVkIHRvIGVuYWJsZSBwY2llIHJlZ3VsYXRvci5cbiIpOw0KPiA+ID4gPiArCQlyZWdtYXBfdXBk YXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLCBJT01VWENfR1BSMTIsDQo+ID4gPiA+ICsJ CQkJSU1YNlNYX0dQUjEyX1JYX0VRX01BU0ssIElNWDZTWF9HUFIxMl9SWF9FUV8yKTsNCj4gPiA+ ID4gKwl9DQo+ID4gPiA+DQo+ID4gPiA+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+ aW9tdXhjX2dwciwgSU9NVVhDX0dQUjEyLA0KPiA+ID4gPiAtCQkJSU1YNlFfR1BSMTJfUENJRV9D VExfMiwgMCA8PCAxMCk7DQo+ID4gPiA+ICsJCQlJTVg2UV9HUFIxMl9QQ0lFX0NUTF8yLA0KPiA+ ID4gPiArCQkJSU1YNlFfR1BSMTJfUENJRV9DVExfMl9DTFIpOw0KPiA+ID4gPg0KPiA+ID4gPiAg CS8qIGNvbmZpZ3VyZSBjb25zdGFudCBpbnB1dCBzaWduYWwgdG8gdGhlIHBjaWUgY3RybCBhbmQg cGh5ICovDQo+ID4gPiA+ICAJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dw ciwgSU9NVVhDX0dQUjEyLA0KPiA+ID4gPiAgCQkJSU1YNlFfR1BSMTJfREVWSUNFX1RZUEUsIFBD SV9FWFBfVFlQRV9ST09UX1BPUlQgPDwgMTIpOw0KPiA+ID4gPiAgCXJlZ21hcF91cGRhdGVfYml0 cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFIxMiwNCj4gPiA+ID4gLQkJCUlNWDZR X0dQUjEyX0xPU19MRVZFTCwgOSA8PCA0KTsNCj4gPiA+ID4gKwkJCUlNWDZRX0dQUjEyX0xPU19M RVZFTCwgSU1YNlFfR1BSMTJfTE9TX0xFVkVMXzkpOw0KPiA+ID4gPg0KPiA+ID4gPiAgCXJlZ21h cF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIElPTVVYQ19HUFI4LA0KPiA+ID4g PiAgCQkJSU1YNlFfR1BSOF9UWF9ERUVNUEhfR0VOMSwgMCA8PCAwKTsgQEAgLTM3MCw3ICs0MzUs OCBAQA0KPiBzdGF0aWMNCj4gDQo+IFsuLi5dDQo+IA0KPiA+ID4gPiArc3RhdGljIHZvaWQgcGNp X2lteF9yZXN1bWUodm9pZCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgcGNpZV9wb3J0 ICpwcCA9ICZpbXg2X3BjaWUtPnBwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKGlzX2lteDZz eF9wY2llKGlteDZfcGNpZSkpIHsNCj4gPiA+ID4gKwkJLyogcmVzZXQgaU1YNlNYIFBDSWUgKi8N Cj4gPiA+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4g PiA+ID4gKwkJCQlJT01VWENfR1BSNSwgQklUKDE4KSwgMSA8PCAxOCk7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ ID4gKwkJCQlJT01VWENfR1BSNSwgQklUKDE4KSwgMCA8PCAxOCk7DQo+ID4gPiA+ICsNCj4gPiA+ DQo+ID4gPiBBZ2FpbiBtYWdpYyBudW1iZXJzIGhlcmUuIFBsZWFzZSBhZGQgZGVmaW5lcyBmb3Ig dGhvc2UuDQo+ID4gW1JpY2hhcmRdIE9rLg0KPiA+ID4NCj4gPiA+ID4gKwkJLyoNCj4gPiA+ID4g KwkJICogY29udHJvbGxlciBtYXliZSB0dXJuIG9mZiwgcmUtY29uZmlndXJlIGFnYWluDQo+ID4g PiA+ICsJCSAqIFNldCB0aGUgQ0xBU1NfUkVWIG9mIFJDIENGRyBoZWFkZXIgdG8NCj4gPiA+ID4g KwkJICogUENJX0NMQVNTX0JSSURHRV9QQ0kNCj4gPiA+ID4gKwkJICovDQo+ID4gPiA+ICsJCXdy aXRlbChyZWFkbChwcC0+ZGJpX2Jhc2UgKyBQQ0lfQ0xBU1NfUkVWSVNJT04pDQo+ID4gPiA+ICsJ CQl8IChQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCAxNiksDQo+ID4gPiA+ICsJCQlwcC0+ZGJpX2Jh c2UgKyBQQ0lfQ0xBU1NfUkVWSVNJT04pOw0KPiA+ID4gPiArDQo+ID4gPg0KPiA+ID4gQ2FuJ3Qg d2UganVzdCBtb3ZlIHRoZSBjYWxsIHRvIHNldCB0aGlzIGZyb20gZHdfcGNpZV9ob3N0X2luaXQo KSB0bw0KPiA+ID4gZHdfcGNpZV9zZXR1cF9yYygpIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhp cyBvdXJzZWx2ZXM/IEl0IHNlZW1zDQo+ID4gPiB0byBiZSB0aGUgbW9yZSBsb2dpY2FsIGNoYW5n ZS4NCj4gPiBbUmljaGFyZF1kd19wY2llX2hvc3RfaW5pdCBjb250YWlucyB0aGUgd2hvbGUgcmUt aW5pdGlhbGl6YXRpb24gYW5kDQo+ID4gcmUtbGluay11cCAgYWdhaW4gb2YgdGhlIHBjaWUgbW9k dWxlLiBJdCdzIG5vdCBwcm9wZXIgdG8gcmUtY2FsbA0KPiBkd19wY2llX2hvc3RfaW5pdCgpLg0K PiA+IEkgZmluZCB0aGF0IHRoZSBtc2kgaW5pdCBzaG91bGQgYmUgcmUtY29uZmlndXJlZCBhZ2Fp biBhZnRlciByZXN1bWUgYmFjay4NCj4gPiBTbywgdGhlIGRlZmluaXRpb25zIG9mIHRoZSAiUENJ RV9NU0lfQUREUl9MTyIgYW5kICJQQ0lFX01TSV9BRERSX0hJIg0KPiA+IHdvdWxkIGJlIHVzZWQg aGVyZS4NCj4gPg0KPiANCj4gSSBzZWVtcyB5b3UgbWlzdW5kZXJzdG9vZCBteSBjb21tZW50IGhl cmUuIEknbSBub3Qgc2F5aW5nIHdlIHNob3VsZCBjYWxsDQo+IGR3X3BjaWVfaG9zdF9pbml0KCkg aGVyZSwgd2hpY2ggd291bGQgYmUgY2xlYXJseSB3cm9uZy4NCj4gDQo+IFdoYXQgSSdtIHNheWlu ZyBpcyB0aGF0IHRoZSBjYWxsIHRvIHNldCB1cCB0aGUgQ0xBU1NfUkVWIHJlZ2lzdGVyIGlzIGN1 cnJlbnRseQ0KPiBkb25lIGluIGR3X3BjaWVfaG9zdF9pbml0KCksIGJ1dCBmcm9tIGEgcXVpY2sg bG9vayBhdCB0aGUgY29kZSBJIHRoaW5rIGl0IGlzDQo+IHNhZmUgdG8gbW92ZSB0aGlzIGNhbGwg dG8gZHdfcGNpZV9zZXR1cF9yYygpLg0KPiBJZiB5b3UgbW92ZSBpdCB0byB0aGlzIGZ1bmN0aW9u IHRoZXJlIHdvdWxkIG5vIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseSBmcm9tDQo+IHRoaXMgcmVz dW1lIGhvb2sgYWdhaW4uDQpbUmljaGFyZF0gVW5kZXJzdG9vZCwgdGhhbmtzLg0KVGhlbiwgSSB3 b3VsZCBtb3ZlIHRoZSBzZXR1cCBvZiB0aGUgQ0xBU1NfUkVWIHJlZ2lzdGVyIHRvIGR3X3BjaWVf c2V0X3JjKCkgbGF0ZXIuDQo+IA0KPiA+IEJUVywgZG8geW91IGtub3cgd2h5IHRoZSAiLyogU3lu b3BzaXMgc3BlY2lmaWMgUENJRSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycw0KPiAqLyINCj4gPiBp cyBub3QgZGVmaW5lZCBpbiBwY2llLWRlc2lnbndhcmUuaCwgYnV0IGluIHBjaWUtZGVzaWdud2Fy ZS5jPw0KPiA+DQo+IA0KPiBNb3N0IHByb2JhYmx5IGJlY2F1c2UgdGhlIHNldHVwIGZvciB0aGUg RFcgUENJZSBjb3JlIHNob3VsZCBiZSBoYW5kbGVkIHRocm91Z2gNCj4gcGNpZS1kZXNpZ253YXJl LmMgYW5kIG5vdCB0aHJvdWdoIHRoZSBpbmRpdmlkdWFsIFNvQyBkcml2ZXJzLg0KPiANCltSaWNo YXJkXSBHb3QgdGhhdCwgdGhhbmtzLg0KPiA+ID4NCj4gPiA+ID4gKwkJZHdfcGNpZV9zZXR1cF9y YyhwcCk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0 aWMgc3RydWN0IHN5c2NvcmVfb3BzIHBjaV9pbXhfc3lzY29yZV9vcHMgPSB7DQo+ID4gPiA+ICsJ LnN1c3BlbmQgPSBwY2lfaW14X3N1c3BlbmQsDQo+ID4gPiA+ICsJLnJlc3VtZSA9IHBjaV9pbXhf cmVzdW1lLA0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPg0K PiA+ID4gV2h5IGRvZXMgdGhpcyBuZWVkIHRvIGJlIHN5c2NvcmVfb3BzIGluc3RlYWQgb2YgZGV2 X3BtX29wcz8NCj4gPiBbUmljaGFyZF0gUE1fVFVSTl9PRkYgbXNnIHNob3VsZCBiZSBzZW50IG91 dCBhdCB0aGUgZW5kIG9mIHRoZSBzdXNwZW5kIG9mDQo+IHBjaWUgc3Vic3lzdGVtLg0KPiA+IFJl c3VtZSBhbmQgcmUtY29uZmlndXJlIG9mIHJjIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGRvbmUgYmVm b3JlIHRoZSByZXN1bWUgb2YNCj4gcGNpZSBzdWJzeXN0ZW0uDQo+ID4gU28sIHN5c2NvcmVfb3Bz IGlzIHVzZWQgaGVyZS4NCj4gDQo+IE9rLCBtYWtlcyBzZW5zZS4NCltSaWNoYXJkXVRoYW5rcy4N Cj4gDQo+IFJlZ2FyZHMsDQo+IEx1Y2FzDQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAg ICAgICAgICAgIHwgTHVjYXMgU3RhY2ggICAgICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBM aW51eCBTb2x1dGlvbnMgICB8IGh0dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg0KQmVz dCBSZWdhcmRzDQpSaWNoYXJkIFpodQ0KDQo= ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto. 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu ` (4 preceding siblings ...) 2014-09-23 4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu @ 2014-09-23 9:18 ` Lucas Stach 2014-09-23 9:29 ` Hong-Xing.Zhu 5 siblings, 1 reply; 31+ messages in thread From: Lucas Stach @ 2014-09-23 9:18 UTC (permalink / raw) To: Richard Zhu; +Cc: linux-pci-owner, linux-pci, shawn.guo, festevam, tharvey Hi Richard, Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu: > Hi Tim: > After I changed the wait clocks stabilize delay after pcie_ref_en is set > in this patch-set. > Can you help to make a double check whether it's ok or not at your side? > > Thanks in advanced. > I'll go through this series today. Please give me some time to properly comment on every patch before posting a new version of the series. Thanks. > Main changes since the v1: > 1. Regarding to Lucas' comments, seperated the enalbe pcie on > imx6qdl sabreauto patch. > 2. Add the description why the wait clock stabilize delay should > be run after pcie_ref_en is set. > 3. Return 0 directly in suspend call back. > > Main changes since the RFC: > Thanks for quick review from Lucas. > 1. seperate the smashed patch-set. > 2. remove the "power-on-gpio". > 3. add/update the pcie-supply of the dts and binding. > 4. > > [PATCH v2 1/5] PCI: imx6: enable pcie on imx6qdl sabreauto > [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en > [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie > [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits > [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support -- Pengutronix e.K. | Lucas Stach | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto. 2014-09-23 9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach @ 2014-09-23 9:29 ` Hong-Xing.Zhu 0 siblings, 0 replies; 31+ messages in thread From: Hong-Xing.Zhu @ 2014-09-23 9:29 UTC (permalink / raw) To: Lucas Stach Cc: linux-pci-owner@vger.kernel.org, linux-pci@vger.kernel.org, Shengchao Guo, festevam@gmail.com, tharvey@gateworks.com PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMdWNhcyBTdGFjaCBbbWFpbHRv Omwuc3RhY2hAcGVuZ3V0cm9uaXguZGVdDQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMywg MjAxNCA1OjE5IFBNDQo+IFRvOiBaaHUgUmljaGFyZC1SNjUwMzcNCj4gQ2M6IGxpbnV4LXBjaS1v d25lckB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IEd1byBTaGF3 bi0NCj4gUjY1MDczOyBmZXN0ZXZhbUBnbWFpbC5jb207IHRoYXJ2ZXlAZ2F0ZXdvcmtzLmNvbQ0K PiBTdWJqZWN0OiBSZTogW1BBVENIIHYyXVBDSTogaW14NjogZW5hYmxlIHBjaWUgb24gaW14NnN4 IHNkYiBhbmQgaW14NnFkbA0KPiBzYWJyZWF1dG8uDQo+IA0KPiBIaSBSaWNoYXJkLA0KPiANCj4g QW0gRGllbnN0YWcsIGRlbiAyMy4wOS4yMDE0LCAxMjoxMSArMDgwMCBzY2hyaWViIFJpY2hhcmQg Wmh1Og0KPiA+IEhpIFRpbToNCj4gPiBBZnRlciBJIGNoYW5nZWQgdGhlIHdhaXQgY2xvY2tzIHN0 YWJpbGl6ZSBkZWxheSBhZnRlciBwY2llX3JlZl9lbiBpcw0KPiA+IHNldCBpbiB0aGlzIHBhdGNo LXNldC4NCj4gPiBDYW4geW91IGhlbHAgdG8gbWFrZSBhIGRvdWJsZSBjaGVjayB3aGV0aGVyIGl0 J3Mgb2sgb3Igbm90IGF0IHlvdXIgc2lkZT8NCj4gPg0KPiA+IFRoYW5rcyBpbiBhZHZhbmNlZC4N Cj4gPg0KPiBJJ2xsIGdvIHRocm91Z2ggdGhpcyBzZXJpZXMgdG9kYXkuIFBsZWFzZSBnaXZlIG1l IHNvbWUgdGltZSB0byBwcm9wZXJseQ0KPiBjb21tZW50IG9uIGV2ZXJ5IHBhdGNoIGJlZm9yZSBw b3N0aW5nIGEgbmV3IHZlcnNpb24gb2YgdGhlIHNlcmllcy4NCj4gVGhhbmtzLg0KPiANCg0KT2sg bm8gcHJvYmxlbSwgdGhhbmtzIGEgbG90IGZvciB5b3VyIGtpbmRseSBoZWxwLg0KDQpCZXN0IFJl Z2FyZHMNClJpY2hhcmQgWmh1DQoNCj4gPiBNYWluIGNoYW5nZXMgc2luY2UgdGhlIHYxOg0KPiA+ IDEuIFJlZ2FyZGluZyB0byBMdWNhcycgY29tbWVudHMsIHNlcGVyYXRlZCB0aGUgZW5hbGJlIHBj aWUgb24gaW14NnFkbA0KPiA+IHNhYnJlYXV0byBwYXRjaC4NCj4gPiAyLiBBZGQgdGhlIGRlc2Ny aXB0aW9uIHdoeSB0aGUgd2FpdCBjbG9jayBzdGFiaWxpemUgZGVsYXkgc2hvdWxkIGJlDQo+ID4g cnVuIGFmdGVyIHBjaWVfcmVmX2VuIGlzIHNldC4NCj4gPiAzLiBSZXR1cm4gMCBkaXJlY3RseSBp biBzdXNwZW5kIGNhbGwgYmFjay4NCj4gPg0KPiA+IE1haW4gY2hhbmdlcyBzaW5jZSB0aGUgUkZD Og0KPiA+IFRoYW5rcyBmb3IgcXVpY2sgcmV2aWV3IGZyb20gTHVjYXMuDQo+ID4gMS4gc2VwZXJh dGUgdGhlIHNtYXNoZWQgcGF0Y2gtc2V0Lg0KPiA+IDIuIHJlbW92ZSB0aGUgInBvd2VyLW9uLWdw aW8iLg0KPiA+IDMuIGFkZC91cGRhdGUgdGhlIHBjaWUtc3VwcGx5IG9mIHRoZSBkdHMgYW5kIGJp bmRpbmcuDQo+ID4gNC4NCj4gPg0KPiA+IFtQQVRDSCB2MiAxLzVdIFBDSTogaW14NjogZW5hYmxl IHBjaWUgb24gaW14NnFkbCBzYWJyZWF1dG8gW1BBVENIIHYyDQo+ID4gMi81XSBQQ0k6IGlteDY6 IHdhaXQgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUgYWZ0ZXIgcmVmX2VuIFtQQVRDSCB2Mg0KPiA+ IDMvNV0gUENJOiBpbXg2OiB1cGRhdGUgZHRzIGFuZCBiaW5kaW5nIGZvciBpbXg2c3ggcGNpZSBb UEFUQ0ggdjIgNC81XQ0KPiA+IFBDSTogaW14NjogYWRkIGlteDZzeCBwY2llIHJlbGF0ZWQgZ3By IGJpdHMgW1BBVENIIHYyIDUvNV0gUENJOiBpbXg2Og0KPiA+IGFkZCBpbXg2c3ggcGNpZSBzdXBw b3J0DQo+IA0KPiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgIHwgTHVjYXMgU3Rh Y2ggICAgICAgICAgICAgICAgIHwNCj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICB8IGh0 dHA6Ly93d3cucGVuZ3V0cm9uaXguZGUvICB8DQoNCg== ^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2014-10-24 5:17 UTC | newest] Thread overview: 31+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-09-23 4:11 [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Richard Zhu 2014-09-23 4:11 ` [PATCH v2 1/5] PCI: imx6: enable pcie on " Richard Zhu 2014-09-23 9:19 ` Lucas Stach 2014-09-23 12:40 ` Fabio Estevam 2014-09-24 2:54 ` Hong-Xing.Zhu 2014-09-24 21:04 ` Fabio Estevam 2014-09-25 1:21 ` Hong-Xing.Zhu 2014-09-25 1:39 ` Fabio Estevam 2014-09-25 2:02 ` Hong-Xing.Zhu 2014-09-23 4:11 ` [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en Richard Zhu 2014-09-23 9:56 ` Lucas Stach 2014-09-23 12:28 ` Tim Harvey 2014-09-25 5:21 ` Hong-Xing.Zhu 2014-10-01 18:00 ` Tim Harvey 2014-10-02 2:26 ` Hong-Xing.Zhu 2014-09-23 12:45 ` Fabio Estevam 2014-10-24 1:51 ` Fabio Estevam 2014-10-24 2:46 ` Richard.Zhu 2014-09-23 4:11 ` [PATCH v2 3/5] PCI: imx6: update dts and binding for imx6sx pcie Richard Zhu 2014-09-23 10:19 ` Lucas Stach 2014-09-24 9:43 ` Hong-Xing.Zhu 2014-09-23 4:11 ` [PATCH v2 4/5] PCI: imx6: add imx6sx pcie related gpr bits definitions Richard Zhu 2014-09-23 10:21 ` Lucas Stach 2014-09-24 4:45 ` Hong-Xing.Zhu 2014-09-23 4:11 ` [PATCH v2 5/5] PCI: imx6: add imx6sx pcie support Richard Zhu 2014-09-23 11:00 ` Lucas Stach 2014-09-24 7:09 ` Hong-Xing.Zhu 2014-09-24 9:46 ` Lucas Stach 2014-09-24 10:15 ` Hong-Xing.Zhu 2014-09-23 9:18 ` [PATCH v2]PCI: imx6: enable pcie on imx6sx sdb and imx6qdl sabreauto Lucas Stach 2014-09-23 9:29 ` Hong-Xing.Zhu
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).