[linux] porting cvitek asic chips.

1. update cv182x/cv183x configuration file
	2. update cv181x/cv180x configuration file
	3. update clk driver for cvitek
	4. update dma driver for cvitek
	5. update soc driver for cvitek
	6. porting cvitek ion driver from kernel-4.19
	7. compatible with riscv

Change-Id: Icff9fafe0ebe7d6bab824bbadb952e08bdc66c19
This commit is contained in:
wangliang.wang
2023-03-09 14:38:25 +08:00
committed by sam.xiang
parent 4bc998a131
commit 4f810186ab
2062 changed files with 544892 additions and 2134 deletions

View File

@ -12,7 +12,76 @@
#include <linux/phy/phy.h>
#include <linux/usb/phy.h>
#if defined(CONFIG_CVITEK_USB_LEGACY)
#include <linux/device.h>
#include <linux/hrtimer.h>
#include <linux/ktime.h>
#include <linux/usb.h>
#include <linux/usb/hcd.h>
#include <linux/usb/gadget.h>
#include <linux/usb/otg-fsm.h>
#endif
#if defined(CONFIG_CVITEK_USB_LEGACY)
/**
* struct otg_hcd - host controller state and interface
*
* @hcd: host controller
* @irqnum: irq number
* @irqflags: irq flags
* @ops: otg to host controller interface
*/
struct otg_hcd {
struct usb_hcd *hcd;
unsigned int irqnum;
unsigned long irqflags;
struct otg_hcd_ops *ops;
};
struct usb_otg;
/**
* struct otg_timer - otg timer data
*
* @timer: high resolution timer
* @timeout: timeout value
* @timetout_bit: pointer to variable that is set on timeout
* @otgd: usb otg data
*/
struct otg_timer {
struct hrtimer timer;
ktime_t timeout;
/* callback data */
int *timeout_bit;
struct usb_otg *otgd;
};
#endif
/**
* struct usb_otg - usb otg controller state
*
* @default_a: Indicates we are an A device. i.e. Host.
* @phy: USB phy interface
* @usb_phy: old usb_phy interface
* @host: host controller bus
* @gadget: gadget device
* @state: current otg state
* @dev: otg controller device
* @caps: otg capabilities revision, hnp, srp, etc
* @fsm: otg finite state machine
* @fsm_ops: controller hooks for the state machine
* ------- internal use only -------
* @primary_hcd: primary host state and interface
* @shared_hcd: shared host state and interface
* @gadget_ops: gadget interface
* @timers: otg timers for state machine
* @list: list of otg controllers
* @work: otg state machine work
* @wq: otg state machine work queue
* @fsm_running: state machine running/stopped indicator
* @flags: to track if host/gadget is running
* @drd_only: dual-role mode. no otg features.
*/
struct usb_otg {
u8 default_a;
@ -24,6 +93,27 @@ struct usb_otg {
enum usb_otg_state state;
#if defined(CONFIG_CVITEK_USB_LEGACY)
struct device *dev;
struct usb_otg_caps *caps;
struct otg_fsm fsm;
struct otg_fsm_ops fsm_ops;
/* internal use only */
struct otg_hcd primary_hcd;
struct otg_hcd shared_hcd;
struct otg_gadget_ops *gadget_ops;
struct otg_timer timers[NUM_OTG_FSM_TIMERS];
struct list_head list;
struct work_struct work;
struct workqueue_struct *wq;
bool fsm_running;
u32 flags;
#define OTG_FLAG_GADGET_RUNNING (1 << 0)
#define OTG_FLAG_HOST_RUNNING (1 << 1)
/* use otg->fsm.lock for serializing access */
bool drd_only;
#endif
/* bind/unbind the host controller */
int (*set_host)(struct usb_otg *otg, struct usb_bus *host);
@ -59,6 +149,98 @@ struct usb_otg_caps {
extern const char *usb_otg_state_string(enum usb_otg_state state);
#if defined(CONFIG_CVITEK_USB_LEGACY)
/**
* struct usb_otg_config - otg controller configuration
* @caps: otg capabilities of the controller
* @ops: otg fsm operations
* @otg_timeouts: override default otg fsm timeouts
*/
struct usb_otg_config {
struct usb_otg_caps otg_caps;
struct otg_fsm_ops *fsm_ops;
unsigned int otg_timeouts[NUM_OTG_FSM_TIMERS];
};
#if IS_ENABLED(CONFIG_USB_OTG)
struct otg_fsm *usb_otg_register(struct device *dev,
struct usb_otg_config *config,
work_func_t usb_otg_specific_work);
int usb_otg_unregister(struct device *dev);
int usb_otg_register_hcd(struct usb_hcd *hcd, unsigned int irqnum,
unsigned long irqflags, struct otg_hcd_ops *ops);
int usb_otg_unregister_hcd(struct usb_hcd *hcd);
int usb_otg_register_gadget(struct usb_gadget *gadget,
struct otg_gadget_ops *ops);
int usb_otg_unregister_gadget(struct usb_gadget *gadget);
void usb_otg_sync_inputs(struct otg_fsm *fsm);
int usb_otg_kick_fsm(struct device *hcd_gcd_device);
struct device *usb_otg_fsm_to_dev(struct otg_fsm *fsm);
int usb_otg_start_host(struct otg_fsm *fsm, int on);
int usb_otg_start_gadget(struct otg_fsm *fsm, int on);
#else /* CONFIG_USB_OTG */
static inline struct otg_fsm *usb_otg_register(struct device *dev,
struct usb_otg_config *config,
work_func_t usb_otg_specific_work)
{
return ERR_PTR(-ENOTSUPP);
}
static inline int usb_otg_unregister(struct device *dev)
{
return -ENOTSUPP;
}
static inline int usb_otg_register_hcd(struct usb_hcd *hcd, unsigned int irqnum,
unsigned long irqflags,
struct otg_hcd_ops *ops)
{
return -ENOTSUPP;
}
static inline int usb_otg_unregister_hcd(struct usb_hcd *hcd)
{
return -ENOTSUPP;
}
static inline int usb_otg_register_gadget(struct usb_gadget *gadget,
struct otg_gadget_ops *ops)
{
return -ENOTSUPP;
}
static inline int usb_otg_unregister_gadget(struct usb_gadget *gadget)
{
return -ENOTSUPP;
}
static inline void usb_otg_sync_inputs(struct otg_fsm *fsm)
{
}
static inline int usb_otg_kick_fsm(struct device *hcd_gcd_device)
{
return -ENOTSUPP;
}
static inline struct device *usb_otg_fsm_to_dev(struct otg_fsm *fsm)
{
return NULL;
}
static inline int usb_otg_start_host(struct otg_fsm *fsm, int on)
{
return -ENOTSUPP;
}
static inline int usb_otg_start_gadget(struct otg_fsm *fsm, int on)
{
return -ENOTSUPP;
}
#endif /* CONFIG_USB_OTG */
#endif
/* Context: can sleep */
static inline int
otg_start_hnp(struct usb_otg *otg)