| // SPDX-License-Identifier: GPL-2.0 | 
 | /* | 
 |  * xHCI host controller driver for RZ/V2M | 
 |  * | 
 |  * Copyright (C) 2022 Renesas Electronics Corporation | 
 |  */ | 
 |  | 
 | #include <linux/usb/rzv2m_usb3drd.h> | 
 | #include "xhci.h" | 
 | #include "xhci-plat.h" | 
 | #include "xhci-rzv2m.h" | 
 |  | 
 | #define RZV2M_USB3_INTEN	0x1044	/* Interrupt Enable */ | 
 |  | 
 | #define RZV2M_USB3_INT_XHC_ENA	BIT(0) | 
 | #define RZV2M_USB3_INT_HSE_ENA	BIT(2) | 
 | #define RZV2M_USB3_INT_ENA_VAL	(RZV2M_USB3_INT_XHC_ENA \ | 
 | 				 | RZV2M_USB3_INT_HSE_ENA) | 
 |  | 
 | int xhci_rzv2m_init_quirk(struct usb_hcd *hcd) | 
 | { | 
 | 	struct device *dev = hcd->self.controller; | 
 |  | 
 | 	rzv2m_usb3drd_reset(dev->parent, true); | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | void xhci_rzv2m_start(struct usb_hcd *hcd) | 
 | { | 
 | 	u32 int_en; | 
 |  | 
 | 	if (hcd->regs) { | 
 | 		/* Interrupt Enable */ | 
 | 		int_en = readl(hcd->regs + RZV2M_USB3_INTEN); | 
 | 		int_en |= RZV2M_USB3_INT_ENA_VAL; | 
 | 		writel(int_en, hcd->regs + RZV2M_USB3_INTEN); | 
 | 	} | 
 | } |