All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mattijs Korpershoek <mkorpershoek@baylibre.com>
To: Marek Vasut <marex@denx.de>, u-boot@lists.denx.de
Cc: Marek Vasut <marex@denx.de>, Angus Ainslie <angus@akkea.ca>,
	Dmitrii Merkurev <dimorinny@google.com>,
	Eddie Cai <eddie.cai.linux@gmail.com>,
	Kever Yang <kever.yang@rock-chips.com>,
	Lukasz Majewski <lukma@denx.de>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Nishanth Menon <nm@ti.com>,
	Patrice Chotard <patrice.chotard@foss.st.com>,
	Patrick Delaunay <patrick.delaunay@foss.st.com>,
	Philipp Tomsich <philipp.tomsich@vrull.eu>,
	Simon Glass <sjg@chromium.org>, Stefan Roese <sr@denx.de>,
	kernel@puri.sm
Subject: Re: [PATCH v2 13/17] thordown: Use plain udevice for UDC controller interaction
Date: Mon, 04 Sep 2023 09:45:10 +0200	[thread overview]
Message-ID: <87cyyy2xh5.fsf@baylibre.com> (raw)
In-Reply-To: <20230901095003.352930-13-marex@denx.de>

On ven., sept. 01, 2023 at 11:49, Marek Vasut <marex@denx.de> wrote:

> Convert to plain udevice interaction with UDC controller
> device, avoid the use of UDC uclass dev_array .
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> ---
> Cc: Angus Ainslie <angus@akkea.ca>
> Cc: Dmitrii Merkurev <dimorinny@google.com>
> Cc: Eddie Cai <eddie.cai.linux@gmail.com>
> Cc: Kever Yang <kever.yang@rock-chips.com>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> Cc: Philipp Tomsich <philipp.tomsich@vrull.eu>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Stefan Roese <sr@denx.de>
> Cc: kernel@puri.sm

Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>

> ---
> V2: No change
> ---
>  cmd/thordown.c              |  9 +++--
>  drivers/usb/gadget/f_thor.c | 74 +++++++++++++++++++------------------
>  include/thor.h              |  4 +-
>  3 files changed, 45 insertions(+), 42 deletions(-)
>
> diff --git a/cmd/thordown.c b/cmd/thordown.c
> index 0d8dcee5314..fcfd38f523c 100644
> --- a/cmd/thordown.c
> +++ b/cmd/thordown.c
> @@ -17,6 +17,7 @@ int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>  {
>  	char *interface, *devstring;
>  	int controller_index;
> +	struct udevice *udc;
>  	int ret;
>  
>  	if (argc < 4)
> @@ -32,7 +33,7 @@ int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>  		goto done;
>  
>  	controller_index = simple_strtoul(argv[1], NULL, 0);
> -	ret = usb_gadget_initialize(controller_index);
> +	ret = udc_device_get_by_index(controller_index, &udc);
>  	if (ret) {
>  		pr_err("USB init failed: %d\n", ret);
>  		ret = CMD_RET_FAILURE;
> @@ -46,7 +47,7 @@ int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>  		goto exit;
>  	}
>  
> -	ret = thor_init();
> +	ret = thor_init(udc);
>  	if (ret) {
>  		pr_err("THOR DOWNLOAD failed: %d\n", ret);
>  		ret = CMD_RET_FAILURE;
> @@ -54,7 +55,7 @@ int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>  	}
>  
>  	do {
> -		ret = thor_handle();
> +		ret = thor_handle(udc);
>  		if (ret == THOR_DFU_REINIT_NEEDED) {
>  			dfu_free_entities();
>  			ret = dfu_init_env_entities(interface, devstring);
> @@ -67,7 +68,7 @@ int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>  	} while (ret == 0);
>  exit:
>  	g_dnl_unregister();
> -	usb_gadget_release(controller_index);
> +	udc_device_put(udc);
>  done:
>  	dfu_free_entities();
>  
> diff --git a/drivers/usb/gadget/f_thor.c b/drivers/usb/gadget/f_thor.c
> index 47ef55b2fd3..3caa4c36387 100644
> --- a/drivers/usb/gadget/f_thor.c
> +++ b/drivers/usb/gadget/f_thor.c
> @@ -15,9 +15,10 @@
>   */
>  
>  #include <command.h>
> -#include <errno.h>
>  #include <common.h>
>  #include <console.h>
> +#include <dm.h>
> +#include <errno.h>
>  #include <init.h>
>  #include <log.h>
>  #include <malloc.h>
> @@ -34,9 +35,9 @@
>  
>  #include "f_thor.h"
>  
> -static void thor_tx_data(unsigned char *data, int len);
> +static void thor_tx_data(struct udevice *udc, unsigned char *data, int len);
>  static void thor_set_dma(void *addr, int len);
> -static int thor_rx_data(void);
> +static int thor_rx_data(struct udevice *udc);
>  
>  static struct f_thor *thor_func;
>  static inline struct f_thor *func_to_thor(struct usb_function *f)
> @@ -56,15 +57,15 @@ DEFINE_CACHE_ALIGN_BUFFER(char, f_name, F_NAME_BUF_SIZE + 1);
>  static unsigned long long int thor_file_size;
>  static int alt_setting_num;
>  
> -static void send_rsp(const struct rsp_box *rsp)
> +static void send_rsp(struct udevice *udc, const struct rsp_box *rsp)
>  {
>  	memcpy(thor_tx_data_buf, rsp, sizeof(struct rsp_box));
> -	thor_tx_data(thor_tx_data_buf, sizeof(struct rsp_box));
> +	thor_tx_data(udc, thor_tx_data_buf, sizeof(struct rsp_box));
>  
>  	debug("-RSP: %d, %d\n", rsp->rsp, rsp->rsp_data);
>  }
>  
> -static void send_data_rsp(s32 ack, s32 count)
> +static void send_data_rsp(struct udevice *udc, s32 ack, s32 count)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(struct data_rsp_box, rsp,
>  				 sizeof(struct data_rsp_box));
> @@ -73,12 +74,12 @@ static void send_data_rsp(s32 ack, s32 count)
>  	rsp->count = count;
>  
>  	memcpy(thor_tx_data_buf, rsp, sizeof(struct data_rsp_box));
> -	thor_tx_data(thor_tx_data_buf, sizeof(struct data_rsp_box));
> +	thor_tx_data(udc, thor_tx_data_buf, sizeof(struct data_rsp_box));
>  
>  	debug("-DATA RSP: %d, %d\n", ack, count);
>  }
>  
> -static int process_rqt_info(const struct rqt_box *rqt)
> +static int process_rqt_info(struct udevice *udc, const struct rqt_box *rqt)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(struct rsp_box, rsp, sizeof(struct rsp_box));
>  	memset(rsp, 0, sizeof(struct rsp_box));
> @@ -111,11 +112,11 @@ static int process_rqt_info(const struct rqt_box *rqt)
>  		return -EINVAL;
>  	}
>  
> -	send_rsp(rsp);
> +	send_rsp(udc, rsp);
>  	return true;
>  }
>  
> -static int process_rqt_cmd(const struct rqt_box *rqt)
> +static int process_rqt_cmd(struct udevice *udc, const struct rqt_box *rqt)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(struct rsp_box, rsp, sizeof(struct rsp_box));
>  	memset(rsp, 0, sizeof(struct rsp_box));
> @@ -126,7 +127,7 @@ static int process_rqt_cmd(const struct rqt_box *rqt)
>  	switch (rqt->rqt_data) {
>  	case RQT_CMD_REBOOT:
>  		debug("TARGET RESET\n");
> -		send_rsp(rsp);
> +		send_rsp(udc, rsp);
>  		g_dnl_unregister();
>  		dfu_free_entities();
>  #ifdef CONFIG_THOR_RESET_OFF
> @@ -136,7 +137,7 @@ static int process_rqt_cmd(const struct rqt_box *rqt)
>  		break;
>  	case RQT_CMD_POWEROFF:
>  	case RQT_CMD_EFSCLEAR:
> -		send_rsp(rsp);
> +		send_rsp(udc, rsp);
>  	default:
>  		printf("Command not supported -> cmd: %d\n", rqt->rqt_data);
>  		return -EINVAL;
> @@ -145,7 +146,8 @@ static int process_rqt_cmd(const struct rqt_box *rqt)
>  	return true;
>  }
>  
> -static long long int download_head(unsigned long long total,
> +static long long int download_head(struct udevice *udc,
> +				   unsigned long long total,
>  				   unsigned int packet_size,
>  				   long long int *left,
>  				   int *cnt)
> @@ -166,7 +168,7 @@ static long long int download_head(unsigned long long total,
>  	while (total - rcv_cnt >= packet_size) {
>  		thor_set_dma(buf, packet_size);
>  		buf += packet_size;
> -		ret_rcv = thor_rx_data();
> +		ret_rcv = thor_rx_data(udc);
>  		if (ret_rcv < 0)
>  			return ret_rcv;
>  		rcv_cnt += ret_rcv;
> @@ -184,7 +186,7 @@ static long long int download_head(unsigned long long total,
>  			}
>  			buf = transfer_buffer;
>  		}
> -		send_data_rsp(0, ++usb_pkt_cnt);
> +		send_data_rsp(udc, 0, ++usb_pkt_cnt);
>  	}
>  
>  	/* Calculate the amount of data to arrive from PC (in bytes) */
> @@ -200,11 +202,11 @@ static long long int download_head(unsigned long long total,
>  
>  	if (left_to_rcv) {
>  		thor_set_dma(buf, packet_size);
> -		ret_rcv = thor_rx_data();
> +		ret_rcv = thor_rx_data(udc);
>  		if (ret_rcv < 0)
>  			return ret_rcv;
>  		rcv_cnt += ret_rcv;
> -		send_data_rsp(0, ++usb_pkt_cnt);
> +		send_data_rsp(udc, 0, ++usb_pkt_cnt);
>  	}
>  
>  	debug("%s: %llu total: %llu cnt: %d\n", __func__, rcv_cnt, total, *cnt);
> @@ -254,7 +256,7 @@ static int download_tail(long long int left, int cnt)
>  	return ret;
>  }
>  
> -static long long int process_rqt_download(const struct rqt_box *rqt)
> +static long long int process_rqt_download(struct udevice *udc, const struct rqt_box *rqt)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(struct rsp_box, rsp, sizeof(struct rsp_box));
>  	static long long int left, ret_head;
> @@ -301,8 +303,8 @@ static long long int process_rqt_download(const struct rqt_box *rqt)
>  		}
>  		break;
>  	case RQT_DL_FILE_START:
> -		send_rsp(rsp);
> -		ret_head = download_head(thor_file_size, THOR_PACKET_SIZE,
> +		send_rsp(udc, rsp);
> +		ret_head = download_head(udc, thor_file_size, THOR_PACKET_SIZE,
>  					 &left, &cnt);
>  		if (ret_head < 0) {
>  			left = 0;
> @@ -324,11 +326,11 @@ static long long int process_rqt_download(const struct rqt_box *rqt)
>  		ret = -ENOTSUPP;
>  	}
>  
> -	send_rsp(rsp);
> +	send_rsp(udc, rsp);
>  	return ret;
>  }
>  
> -static int process_data(void)
> +static int process_data(struct udevice *udc)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(struct rqt_box, rqt, sizeof(struct rqt_box));
>  	int ret = -EINVAL;
> @@ -339,13 +341,13 @@ static int process_data(void)
>  
>  	switch (rqt->rqt) {
>  	case RQT_INFO:
> -		ret = process_rqt_info(rqt);
> +		ret = process_rqt_info(udc, rqt);
>  		break;
>  	case RQT_CMD:
> -		ret = process_rqt_cmd(rqt);
> +		ret = process_rqt_cmd(udc, rqt);
>  		break;
>  	case RQT_DL:
> -		ret = (int) process_rqt_download(rqt);
> +		ret = (int) process_rqt_download(udc, rqt);
>  		break;
>  	case RQT_UL:
>  		puts("RQT: UPLOAD not supported!\n");
> @@ -536,7 +538,7 @@ static struct usb_request *alloc_ep_req(struct usb_ep *ep, unsigned length)
>  	return req;
>  }
>  
> -static int thor_rx_data(void)
> +static int thor_rx_data(struct udevice *udc)
>  {
>  	struct thor_dev *dev = thor_func->dev;
>  	int data_to_rx, tmp, status;
> @@ -557,7 +559,7 @@ static int thor_rx_data(void)
>  		}
>  
>  		while (!dev->rxdata) {
> -			usb_gadget_handle_interrupts(0);
> +			dm_usb_gadget_handle_interrupts(udc);
>  			if (ctrlc())
>  				return -1;
>  		}
> @@ -568,7 +570,7 @@ static int thor_rx_data(void)
>  	return tmp;
>  }
>  
> -static void thor_tx_data(unsigned char *data, int len)
> +static void thor_tx_data(struct udevice *udc, unsigned char *data, int len)
>  {
>  	struct thor_dev *dev = thor_func->dev;
>  	unsigned char *ptr = dev->in_req->buf;
> @@ -591,7 +593,7 @@ static void thor_tx_data(unsigned char *data, int len)
>  
>  	/* Wait until tx interrupt received */
>  	while (!dev->txdata)
> -		usb_gadget_handle_interrupts(0);
> +		dm_usb_gadget_handle_interrupts(udc);
>  
>  	dev->txdata = 0;
>  }
> @@ -685,18 +687,18 @@ static void thor_set_dma(void *addr, int len)
>  	dev->out_req->length = len;
>  }
>  
> -int thor_init(void)
> +int thor_init(struct udevice *udc)
>  {
>  	struct thor_dev *dev = thor_func->dev;
>  
>  	/* Wait for a device enumeration and configuration settings */
>  	debug("THOR enumeration/configuration setting....\n");
>  	while (!dev->configuration_done)
> -		usb_gadget_handle_interrupts(0);
> +		dm_usb_gadget_handle_interrupts(udc);
>  
>  	thor_set_dma(thor_rx_data_buf, strlen("THOR"));
>  	/* detect the download request from Host PC */
> -	if (thor_rx_data() < 0) {
> +	if (thor_rx_data(udc) < 0) {
>  		printf("%s: Data not received!\n", __func__);
>  		return -1;
>  	}
> @@ -706,7 +708,7 @@ int thor_init(void)
>  		udelay(30 * 1000); /* 30 ms */
>  
>  		strcpy((char *)thor_tx_data_buf, "ROHT");
> -		thor_tx_data(thor_tx_data_buf, strlen("ROHT"));
> +		thor_tx_data(udc, thor_tx_data_buf, strlen("ROHT"));
>  	} else {
>  		puts("Wrong reply information\n");
>  		return -1;
> @@ -715,17 +717,17 @@ int thor_init(void)
>  	return 0;
>  }
>  
> -int thor_handle(void)
> +int thor_handle(struct udevice *udc)
>  {
>  	int ret;
>  
>  	/* receive the data from Host PC */
>  	while (1) {
>  		thor_set_dma(thor_rx_data_buf, sizeof(struct rqt_box));
> -		ret = thor_rx_data();
> +		ret = thor_rx_data(udc);
>  
>  		if (ret > 0) {
> -			ret = process_data();
> +			ret = process_data(udc);
>  #ifdef CONFIG_THOR_RESET_OFF
>  			if (ret == RESET_DONE)
>  				break;
> diff --git a/include/thor.h b/include/thor.h
> index ee67ab0a270..3cb56b654ae 100644
> --- a/include/thor.h
> +++ b/include/thor.h
> @@ -14,7 +14,7 @@
>  
>  #define THOR_DFU_REINIT_NEEDED	0xFFFFFFFE
>  
> -int thor_handle(void);
> -int thor_init(void);
> +int thor_handle(struct udevice *udc);
> +int thor_init(struct udevice *udc);
>  int thor_add(struct usb_configuration *c);
>  #endif /* __THOR_H_ */
> -- 
> 2.40.1

  reply	other threads:[~2023-09-04  7:45 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-01  9:49 [PATCH v2 01/17] dm: usb: udc: Factor out plain udevice handler functions Marek Vasut
2023-09-01  9:49 ` [PATCH v2 02/17] usb: sandbox: Add DM_USB_GADGET support Marek Vasut
2023-09-01  9:49 ` [PATCH v2 03/17] configs: sandbox: Enable DM_USB_GADGET Marek Vasut
2023-09-01  9:49 ` [PATCH v2 04/17] cmd: fastboot: Use plain udevice for UDC controller interaction Marek Vasut
2023-09-01  9:49 ` [PATCH v2 05/17] cmd: rockusb: " Marek Vasut
2023-09-04  7:37   ` Mattijs Korpershoek
2023-09-01  9:49 ` [PATCH v2 06/17] cmd: sdp: Reorder variable declaration Marek Vasut
2023-09-01  9:49 ` [PATCH v2 07/17] cmd: thordown: " Marek Vasut
2023-09-04  7:40   ` Mattijs Korpershoek
2023-09-01  9:49 ` [PATCH v2 08/17] cmd: ums: Use plain udevice for UDC controller interaction Marek Vasut
2023-09-01  9:49 ` [PATCH v2 09/17] dfu: Detach the controller on error Marek Vasut
2023-09-01  9:49 ` [PATCH v2 10/17] dfu: Use plain udevice for UDC controller interaction Marek Vasut
2023-09-01  9:49 ` [PATCH v2 11/17] spl: sdp: Detach the controller on error Marek Vasut
2023-09-01  9:49 ` [PATCH v2 12/17] sdp: Use plain udevice for UDC controller interaction Marek Vasut
2023-09-01  9:49 ` [PATCH v2 13/17] thordown: " Marek Vasut
2023-09-04  7:45   ` Mattijs Korpershoek [this message]
2023-09-01  9:50 ` [PATCH v2 14/17] usb: gadget: acm: " Marek Vasut
2023-09-04  7:46   ` Mattijs Korpershoek
2023-09-01  9:50 ` [PATCH v2 15/17] usb: gadget: ether: " Marek Vasut
2023-09-04  7:56   ` Mattijs Korpershoek
2023-09-04  9:10     ` Marek Vasut
2023-09-04 15:37       ` Mattijs Korpershoek
2023-09-01  9:50 ` [PATCH v2 16/17] dm: usb: udc: Drop legacy udevice handler functions Marek Vasut
2023-09-01  9:50 ` [PATCH v2 17/17] board: usb: Replace legacy usb_gadget_handle_interrupts() Marek Vasut
2023-09-22 10:00 ` [PATCH v2 01/17] dm: usb: udc: Factor out plain udevice handler functions Miquel Raynal
2023-09-27 13:59   ` Miquel Raynal
2023-09-30 21:11     ` Marek Vasut
2023-10-02 13:42       ` Miquel Raynal
2023-10-07 21:01         ` Marek Vasut

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=87cyyy2xh5.fsf@baylibre.com \
    --to=mkorpershoek@baylibre.com \
    --cc=angus@akkea.ca \
    --cc=dimorinny@google.com \
    --cc=eddie.cai.linux@gmail.com \
    --cc=kernel@puri.sm \
    --cc=kever.yang@rock-chips.com \
    --cc=lukma@denx.de \
    --cc=marex@denx.de \
    --cc=miquel.raynal@bootlin.com \
    --cc=nm@ti.com \
    --cc=patrice.chotard@foss.st.com \
    --cc=patrick.delaunay@foss.st.com \
    --cc=philipp.tomsich@vrull.eu \
    --cc=sjg@chromium.org \
    --cc=sr@denx.de \
    --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.