Merge pull request #1173 from paolosabatino/xt-q8l-v10

Reworked and enabled usb phy reset patch when waking up for rk3288 devices
This commit is contained in:
Igor Pečovnik 2018-12-01 20:31:26 +01:00 committed by GitHub
commit bdfe77447f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 85 additions and 51 deletions

View file

@ -1,5 +1,5 @@
--- a/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 1970-01-01 01:00:00.000000000 +0100 --- /dev/null 2018-11-29 17:19:47.960000000 +0000
+++ b/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 2018-09-23 15:07:34.436815846 +0200 +++ b/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 2018-09-23 13:07:34.000000000 +0000
@@ -0,0 +1,1120 @@ @@ -0,0 +1,1120 @@
+/* +/*
+ * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com> + * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com>

View file

@ -0,0 +1,31 @@
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
index 0840ffb3..5393f2cd 100644
--- a/arch/arm/boot/dts/rk3288.dtsi
+++ b/arch/arm/boot/dts/rk3288.dtsi
@@ -894,6 +894,8 @@
reg = <0x320>;
clocks = <&cru SCLK_OTGPHY0>;
clock-names = "phyclk";
+ resets = <&cru SRST_USBOTG_PHY>;
+ reset-names = "phy-reset";
#clock-cells = <0>;
};
@@ -902,6 +904,8 @@
reg = <0x334>;
clocks = <&cru SCLK_OTGPHY1>;
clock-names = "phyclk";
+ resets = <&cru SRST_USBHOST0_PHY>;
+ reset-names = "phy-reset";
#clock-cells = <0>;
};
@@ -910,6 +914,8 @@
reg = <0x348>;
clocks = <&cru SCLK_OTGPHY2>;
clock-names = "phyclk";
+ resets = <&cru SRST_USBHOST1_PHY>;
+ reset-names = "phy-reset";
#clock-cells = <0>;
};
};

View file

@ -1,38 +1,38 @@
diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
index 9548d3e..0cd5896 100644 index cc9c93af..3ff41d87 100644
--- a/drivers/usb/dwc2/core.h --- a/drivers/usb/dwc2/core.h
+++ b/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h
@@ -919,6 +919,7 @@ struct dwc2_hsotg { @@ -1021,6 +1021,7 @@ struct dwc2_hsotg {
unsigned int ll_hw_enabled:1; u16 frame_number;
struct phy *phy; struct phy *phy;
+ struct work_struct phy_rst_work; + struct work_struct phy_rst_work;
struct usb_phy *uphy; struct usb_phy *uphy;
struct dwc2_hsotg_plat *plat; struct dwc2_hsotg_plat *plat;
struct regulator_bulk_data supplies[ARRAY_SIZE(dwc2_hsotg_supply_names)]; struct regulator_bulk_data supplies[DWC2_NUM_SUPPLIES];
diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
index 5b228ba..bf1c029 100644 index 19ae2595..f1270bf1 100644
--- a/drivers/usb/dwc2/core_intr.c --- a/drivers/usb/dwc2/core_intr.c
+++ b/drivers/usb/dwc2/core_intr.c +++ b/drivers/usb/dwc2/core_intr.c
@@ -345,6 +345,7 @@ static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg) @@ -396,6 +396,7 @@ static void dwc2_wakeup_from_lpm_l1(struct dwc2_hsotg *hsotg)
static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
{ {
int ret; int ret;
+ struct device_node *np = hsotg->dev->of_node; + struct device_node *np = hsotg->dev->of_node;
/* Clear interrupt */ /* Clear interrupt */
dwc2_writel(GINTSTS_WKUPINT, hsotg->regs + GINTSTS); dwc2_writel(hsotg, GINTSTS_WKUPINT, GINTSTS);
@@ -379,6 +380,16 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) @@ -435,6 +436,16 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
/* Restart the Phy Clock */ /* Restart the Phy Clock */
pcgcctl &= ~PCGCTL_STOPPCLK; pcgcctl &= ~PCGCTL_STOPPCLK;
dwc2_writel(pcgcctl, hsotg->regs + PCGCTL); dwc2_writel(hsotg, pcgcctl, PCGCTL);
+ +
+ /* + /*
+ * It is a quirk in Rockchip RK3288, causing by + * It is a quirk in Rockchip RK3288, causing by
+ * a hardware bug. This will propagate out and + * a hardware bug. This will propagate out and
+ * eventually we'll re-enumerate the device. + * eventually we'll re-enumerate the device.
+ * Not great but the best we can do. + * Not great but the best we can do.
+ */ + */
+ if (of_device_is_compatible(np, "rockchip,rk3288-usb")) + if (of_device_is_compatible(np, "rockchip,rk3288-usb"))
+ schedule_work(&hsotg->phy_rst_work); + schedule_work(&hsotg->phy_rst_work);
+ +
@ -40,10 +40,10 @@ index 5b228ba..bf1c029 100644
jiffies + msecs_to_jiffies(71)); jiffies + msecs_to_jiffies(71));
} else { } else {
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
index 4fc8c60..8ef278e 100644 index 57764289..748763bd 100644
--- a/drivers/usb/dwc2/platform.c --- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c
@@ -207,6 +207,14 @@ int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg) @@ -208,6 +208,14 @@ int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg)
return ret; return ret;
} }
@ -58,7 +58,7 @@ index 4fc8c60..8ef278e 100644
static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
{ {
int i, ret; int i, ret;
@@ -251,6 +259,7 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) @@ -252,6 +260,7 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
return ret; return ret;
} }
} }
@ -66,4 +66,3 @@ index 4fc8c60..8ef278e 100644
if (!hsotg->phy) { if (!hsotg->phy) {
hsotg->uphy = devm_usb_get_phy(hsotg->dev, USB_PHY_TYPE_USB2); hsotg->uphy = devm_usb_get_phy(hsotg->dev, USB_PHY_TYPE_USB2);

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 1970-01-01 01:00:00.000000000 +0100 --- /dev/null 2018-11-29 17:19:47.960000000 +0000
+++ b/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 2018-09-23 15:07:23.816787921 +0200 +++ b/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 2018-11-29 21:12:34.069256135 +0000
@@ -0,0 +1,969 @@ @@ -0,0 +1,951 @@
+/* +/*
+ * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com> + * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com>
+ * 2018 Paolo Sabatino <paolo.sabatino@gm**l.com> + * 2018 Paolo Sabatino <paolo.sabatino@gm**l.com>
@ -880,19 +880,10 @@
+}; +};
+ +
+&usbphy0 { +&usbphy0 {
+ resets = <&cru SRST_USBOTG_PHY>;
+ reset-names = "phy-reset";
+ vbus-supply = <&vcc_otg_5v>; + vbus-supply = <&vcc_otg_5v>;
+}; +};
+ +
+&usbphy1 {
+ resets = <&cru SRST_USBHOST0_PHY>;
+ reset-names = "phy-reset";
+};
+
+&usbphy2 { +&usbphy2 {
+ resets = <&cru SRST_USBHOST1_PHY>;
+ reset-names = "phy-reset";
+ vbus-supply = <&vcc_host_5v>; + vbus-supply = <&vcc_host_5v>;
+}; +};
+ +
@ -951,15 +942,6 @@
+ status = "okay"; + status = "okay";
+}; +};
+ +
+/* q8 device tree specifies that pwm0 is enabled on the device and
+ * this is the device which listens for IR remote control
+ */
+/*
+&pwm0 {
+ status = "okay";
+};
+*/
+
+// i2s bus is present on q8 device, enable it +// i2s bus is present on q8 device, enable it
+&i2s { +&i2s {
+ #sound-dai-cells = <0>; + #sound-dai-cells = <0>;

View file

@ -0,0 +1,31 @@
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
index f7a951afd..b32106332 100644
--- a/arch/arm/boot/dts/rk3288.dtsi
+++ b/arch/arm/boot/dts/rk3288.dtsi
@@ -880,6 +880,8 @@
reg = <0x320>;
clocks = <&cru SCLK_OTGPHY0>;
clock-names = "phyclk";
+ resets = <&cru SRST_USBOTG_PHY>;
+ reset-names = "phy-reset";
#clock-cells = <0>;
};
@@ -888,6 +890,8 @@
reg = <0x334>;
clocks = <&cru SCLK_OTGPHY1>;
clock-names = "phyclk";
+ resets = <&cru SRST_USBHOST0_PHY>;
+ reset-names = "phy-reset";
#clock-cells = <0>;
};
@@ -896,6 +900,8 @@
reg = <0x348>;
clocks = <&cru SCLK_OTGPHY2>;
clock-names = "phyclk";
+ resets = <&cru SRST_USBHOST1_PHY>;
+ reset-names = "phy-reset";
#clock-cells = <0>;
};
};

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 1970-01-01 01:00:00.000000000 +0100 --- /dev/null 2018-11-29 17:19:47.960000000 +0000
+++ b/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 2018-09-23 15:07:44.968843202 +0200 +++ b/arch/arm/boot/dts/rk3288-xt-q8l-v10.dts 2018-11-29 21:02:56.636665164 +0000
@@ -0,0 +1,960 @@ @@ -0,0 +1,951 @@
+/* +/*
+ * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com> + * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com>
+ * 2018 Paolo Sabatino <paolo.sabatino@gm**l.com> + * 2018 Paolo Sabatino <paolo.sabatino@gm**l.com>
@ -875,19 +875,10 @@
+}; +};
+ +
+&usbphy0 { +&usbphy0 {
+ resets = <&cru SRST_USBOTG_PHY>;
+ reset-names = "phy-reset";
+ vbus-supply = <&vcc_otg_5v>; + vbus-supply = <&vcc_otg_5v>;
+}; +};
+ +
+&usbphy1 {
+ resets = <&cru SRST_USBHOST0_PHY>;
+ reset-names = "phy-reset";
+};
+
+&usbphy2 { +&usbphy2 {
+ resets = <&cru SRST_USBHOST1_PHY>;
+ reset-names = "phy-reset";
+ vbus-supply = <&vcc_host_5v>; + vbus-supply = <&vcc_host_5v>;
+}; +};
+ +

View file

@ -1,5 +1,5 @@
--- a/arch/arm/dts/rk3288-xt-q8l-v10.dts 1970-01-01 01:00:00.000000000 +0100 --- /dev/null 2018-11-29 17:19:47.960000000 +0000
+++ b/arch/arm/dts/rk3288-xt-q8l-v10.dts 2018-09-23 14:59:27.243013399 +0200 +++ b/arch/arm/dts/rk3288-xt-q8l-v10.dts 2018-09-23 12:59:27.000000000 +0000
@@ -0,0 +1,740 @@ @@ -0,0 +1,740 @@
+/* +/*
+ * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com> + * Copyright (c) 2014, 2015 FUKAUMI Naoki <naobsd@gmail.com>