All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Yan <andy.yan@rock-chips.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 4/5] rv1108: Make USB OTG functional
Date: Tue, 27 Nov 2018 09:54:13 +0800	[thread overview]
Message-ID: <bb862aab-01ab-fc01-df15-39dac0e0e700@rock-chips.com> (raw)
In-Reply-To: <20181120185535.11822-5-otavio@ossystems.com.br>

Hi:

On 2018/11/21 上午2:55, Otavio Salvador wrote:
> Like it is done for other Rockchip SoCs, introduce a board_usb_init()
> function so that USB OTG can be functional on rv1108 too.
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
>
> Changes in v2: None
>
>   arch/arm/dts/rv1108.dtsi              | 45 ++++++++++++++-
>   arch/arm/mach-rockchip/Makefile       |  1 +
>   arch/arm/mach-rockchip/rv1108-board.c | 81 +++++++++++++++++++++++++++
>   3 files changed, 124 insertions(+), 3 deletions(-)
>   create mode 100644 arch/arm/mach-rockchip/rv1108-board.c


It's better to split dtsi and .c file

>
> diff --git a/arch/arm/dts/rv1108.dtsi b/arch/arm/dts/rv1108.dtsi
> index 23a44bfaca..215d885225 100644
> --- a/arch/arm/dts/rv1108.dtsi
> +++ b/arch/arm/dts/rv1108.dtsi
> @@ -121,8 +121,35 @@
>   	};
>   
>   	grf: syscon at 10300000 {
> -		compatible = "rockchip,rv1108-grf", "syscon";
> +		compatible = "rockchip,rv1108-grf", "syscon", "simple-mfd";
>   		reg = <0x10300000 0x1000>;
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		u2phy: usb2-phy at 100 {
> +			compatible = "rockchip,rv1108-usb2phy";
> +			reg = <0x100 0x0c>;
> +			clocks = <&cru SCLK_USBPHY>;
> +			clock-names = "phyclk";
> +			#clock-cells = <0>;
> +			clock-output-names = "usbphy";
> +			rockchip,usbgrf = <&usbgrf>;
> +			status = "disabled";
> +
> +			u2phy_otg: otg-port {
> +				interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
> +				interrupt-names = "otg-mux";
> +				#phy-cells = <0>;
> +				status = "disabled";
> +			};
> +
> +			u2phy_host: host-port {
> +				interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
> +				interrupt-names = "linestate";
> +				#phy-cells = <0>;
> +				status = "disabled";
> +			};
> +		};
>   	};
>   
>   	saradc: saradc at 1038c000 {
> @@ -141,6 +168,11 @@
>   		reg = <0x20060000 0x1000>;
>   	};
>   
> +	usbgrf: syscon at 202a0000 {
> +		compatible = "rockchip,rv1108-usbgrf", "syscon";
> +		reg = <0x202a0000 0x1000>;
> +	};
> +
>   	cru: clock-controller at 20200000 {
>   		compatible = "rockchip,rv1108-cru";
>   		reg = <0x20200000 0x1000>;
> @@ -200,12 +232,19 @@
>   	};
>   
>   	usb20_otg: usb at 30180000 {
> -		compatible = "rockchip,rv1108-usb", "rockchip,rk3288-usb",
> +		compatible = "rockchip,rv1108-usb", "rockchip,rk3066-usb",
>   			     "snps,dwc2";
>   		reg = <0x30180000 0x40000>;
>   		interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
> -		hnp-srp-disable;
> +		clocks = <&cru HCLK_OTG>;
> +		clock-names = "otg";
>   		dr_mode = "otg";
> +		g-np-tx-fifo-size = <16>;
> +		g-rx-fifo-size = <280>;
> +		g-tx-fifo-size = <256 128 128 64 32 16>;
> +		g-use-dma;
> +		phys = <&u2phy_otg>;
> +		phy-names = "usb2-phy";
>   		status = "disabled";
>   	};
>   
> diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
> index 05706c472a..368302e1da 100644
> --- a/arch/arm/mach-rockchip/Makefile
> +++ b/arch/arm/mach-rockchip/Makefile
> @@ -33,6 +33,7 @@ obj-$(CONFIG_ROCKCHIP_RK322X) += rk322x-board.o
>   obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board.o
>   obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board.o
>   obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399-board.o
> +obj-$(CONFIG_ROCKCHIP_RV1108) += rv1108-board.o
>   endif
>   
>   obj-$(CONFIG_$(SPL_TPL_)RAM) += sdram_common.o
> diff --git a/arch/arm/mach-rockchip/rv1108-board.c b/arch/arm/mach-rockchip/rv1108-board.c
> new file mode 100644
> index 0000000000..3412f2c063
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rv1108-board.c
> @@ -0,0 +1,81 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * (C) Copyright 2015 Google, Inc
> + */
> +
> +#include <common.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG)
> +#include <usb.h>
> +#include <usb/dwc2_udc.h>
> +
> +static struct dwc2_plat_otg_data rv1108_otg_data = {
> +	.rx_fifo_sz	= 512,
> +	.np_tx_fifo_sz	= 16,
> +	.tx_fifo_sz	= 128,
> +};
> +
> +int board_usb_init(int index, enum usb_init_type init)
> +{
> +	const void *blob = gd->fdt_blob;
> +	bool matched = false;
> +	int node, phy_node;
> +	u32 grf_phy_offset;
> +	const char *mode;
> +
> +	/* find the usb_otg node */
> +	node = fdt_node_offset_by_compatible(blob, -1, "rockchip,rk3066-usb");
> +	while (node > 0) {
> +		mode = fdt_getprop(blob, node, "dr_mode", NULL);
> +		if (mode && strcmp(mode, "otg") == 0) {
> +			matched = true;
> +			break;
> +		}
> +
> +		node = fdt_node_offset_by_compatible(blob, node,
> +						     "rockchip,rk3066-usb");
> +	}
> +
> +	if (!matched) {
> +		debug("usb_otg device not found\n");
> +		return -ENODEV;
> +	}
> +
> +	rv1108_otg_data.regs_otg = fdtdec_get_addr(blob, node, "reg");
> +
> +	node = fdtdec_lookup_phandle(blob, node, "phys");
> +	if (node <= 0) {
> +		debug("phys node not found\n");
> +		return -ENODEV;
> +	}
> +
> +	phy_node = fdt_parent_offset(blob, node);
> +	if (phy_node <= 0) {
> +		debug("usb phy node not found\n");
> +		return -ENODEV;
> +	}
> +
> +	rv1108_otg_data.phy_of_node = phy_node;
> +	grf_phy_offset = fdtdec_get_addr(blob, node, "reg");
> +
> +	/* find the grf node */
> +	node = fdt_node_offset_by_compatible(blob, -1,
> +					     "rockchip,rv1108-grf");
> +	if (node <= 0) {
> +		debug("grf node not found\n");
> +		return -ENODEV;
> +	}
> +
> +	rv1108_otg_data.regs_phy = grf_phy_offset + fdtdec_get_addr(blob, node,
> +								    "reg");
> +
> +	return dwc2_udc_probe(&rv1108_otg_data);
> +}
> +
> +int board_usb_cleanup(int index, enum usb_init_type init)
> +{
> +	return 0;
> +}
> +#endif

  reply	other threads:[~2018-11-27  1:54 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-20 18:55 [U-Boot] [PATCH v2 0/5] Submit upstream changes made while porting a customer board to mainline Otavio Salvador
2018-11-20 18:55 ` [U-Boot] [PATCH v2 1/5] clk_rv1108: Sync with vendor tree Otavio Salvador
2018-11-27  1:43   ` Andy Yan
2018-11-27  9:46     ` Otavio Salvador
2018-11-30  3:39     ` vicent.chi at rock-chips.com
2018-11-30  9:58       ` Otavio Salvador
2018-11-30 10:37         ` Otavio Salvador
2018-11-30 11:18           ` Philipp Tomsich
2018-11-30 11:24             ` Otavio Salvador
2018-11-30 11:26               ` Philipp Tomsich
2018-11-20 18:55 ` [U-Boot] [PATCH v2 2/5] rv1108: Enable BOUNCE_BUFFER Otavio Salvador
2018-11-27  1:45   ` Andy Yan
2018-11-20 18:55 ` [U-Boot] [PATCH v2 3/5] rv1108: Enable eMMC support Otavio Salvador
2018-11-26 16:18   ` Otavio Salvador
2018-11-27  1:56     ` Andy Yan
2018-11-27  1:59       ` Philipp Tomsich
2018-11-27  1:51   ` Andy Yan
2018-11-27  9:33     ` Otavio Salvador
2018-11-20 18:55 ` [U-Boot] [PATCH v2 4/5] rv1108: Make USB OTG functional Otavio Salvador
2018-11-27  1:54   ` Andy Yan [this message]
2018-11-20 18:55 ` [U-Boot] [PATCH v2 5/5] rv1108: Add support for default distro_bootcmd Otavio Salvador
2018-11-27  1:55   ` Andy Yan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bb862aab-01ab-fc01-df15-39dac0e0e700@rock-chips.com \
    --to=andy.yan@rock-chips.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.