[U-Boot] [PATCH v4 04/34] musb: sunxi: Add fifo config

Marek Vasut marex at denx.de
Tue Feb 6 14:41:46 UTC 2018


On 02/06/2018 03:25 PM, Jagan Teki wrote:
> Unlike other Allwinner SOC's H3/H5/V3s OTG support 4 endpoints
> with relevant fifo configs, rest all have 5 endpoints.
> So add the fifo configs and defer them based on udevice_id compatible.
> 
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
> ---
>  drivers/usb/musb-new/sunxi.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 43 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c
> index 0b7ff9f..562d311 100644
> --- a/drivers/usb/musb-new/sunxi.c
> +++ b/drivers/usb/musb-new/sunxi.c
> @@ -301,13 +301,52 @@ static const struct musb_platform_ops sunxi_musb_ops = {
>  #define SUNXI_MUSB_MAX_EP_NUM		6
>  #define SUNXI_MUSB_RAM_BITS		11
>  
> +static struct musb_fifo_cfg sunxi_musb_mode_cfg[] = {
> +	MUSB_EP_FIFO_SINGLE(1, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(1, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(2, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(2, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(3, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(3, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(4, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(4, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(5, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(5, FIFO_RX, 512),

Generate all this programatically with a loop ?

> +};
> +
> +/* H3/V3s OTG supports only 4 endpoints */
> +#define SUNXI_MUSB_MAX_EP_NUM_H3	5
> +
> +static struct musb_fifo_cfg sunxi_musb_mode_cfg_h3[] = {
> +	MUSB_EP_FIFO_SINGLE(1, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(1, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(2, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(2, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(3, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(3, FIFO_RX, 512),
> +	MUSB_EP_FIFO_SINGLE(4, FIFO_TX, 512),
> +	MUSB_EP_FIFO_SINGLE(4, FIFO_RX, 512),
> +};
> +
>  static struct musb_hdrc_config musb_config = {
> +	.fifo_cfg       = sunxi_musb_mode_cfg,
> +	.fifo_cfg_size  = ARRAY_SIZE(sunxi_musb_mode_cfg),
>  	.multipoint	= true,
>  	.dyn_fifo	= true,
>  	.num_eps	= SUNXI_MUSB_MAX_EP_NUM,
>  	.ram_bits	= SUNXI_MUSB_RAM_BITS,
>  };
>  
> +static struct musb_hdrc_config musb_config_h3 = {
> +	.fifo_cfg       = sunxi_musb_mode_cfg_h3,
> +	.fifo_cfg_size  = ARRAY_SIZE(sunxi_musb_mode_cfg_h3),
> +	.multipoint	= true,
> +	.dyn_fifo	= true,
> +	.soft_con       = true,
> +	.num_eps	= SUNXI_MUSB_MAX_EP_NUM_H3,
> +	.ram_bits	= SUNXI_MUSB_RAM_BITS,
> +};
> +
>  static int musb_usb_probe(struct udevice *dev)
>  {
>  	struct sunxi_glue *glue = dev_get_priv(dev);
> @@ -328,7 +367,10 @@ static int musb_usb_probe(struct udevice *dev)
>  
>  	pdata.power = 250;
>  	pdata.platform_ops = &sunxi_musb_ops;
> -	pdata.config = &musb_config;
> +	if (!device_is_compatible(dev, "allwinner,sun8i-h3-musb"))

Instead of this, use the compatible's .data to pass the
musb_config(_h3). Then you can do
pdata.config = dev_get_driver_data(dev);

> +		pdata.config = &musb_config;
> +	else
> +		pdata.config = &musb_config_h3;
>  
>  #ifdef CONFIG_USB_MUSB_HOST
>  	pdata.mode = MUSB_HOST;
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list