On ven., sept. 01, 2023 at 11:49, Marek Vasut <[email protected]> wrote:

> Convert to plain udevice interaction with UDC controller
> device, avoid the use of UDC uclass dev_array .
>
> Signed-off-by: Marek Vasut <[email protected]>
> ---
> Cc: Angus Ainslie <[email protected]>
> Cc: Dmitrii Merkurev <[email protected]>
> Cc: Eddie Cai <[email protected]>
> Cc: Kever Yang <[email protected]>
> Cc: Lukasz Majewski <[email protected]>
> Cc: Miquel Raynal <[email protected]>
> Cc: Mattijs Korpershoek <[email protected]>
> Cc: Nishanth Menon <[email protected]>
> Cc: Patrice Chotard <[email protected]>
> Cc: Patrick Delaunay <[email protected]>
> Cc: Philipp Tomsich <[email protected]>
> Cc: Simon Glass <[email protected]>
> Cc: Stefan Roese <[email protected]>
> Cc: [email protected]

Reviewed-by: Mattijs Korpershoek <[email protected]>

> ---
> 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 via email to