blob: aa5f9cec6649df1b5c10c352b59095e2a2e80ed8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
/*
* Copyright (c) 2022-2025 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include "hpm_common.h"
#include "hpm_soc.h"
#include "hpm_l1c_drv.h"
#include "hpm_usb_drv.h"
#include "usb_config.h"
void (*g_usb_hpm_irq[2])(uint8_t busid);
uint8_t g_usb_hpm_busid[2];
#ifndef CONFIG_CHERRYUSB_CUSTOM_IRQ_HANDLER
SDK_DECLARE_EXT_ISR_M(IRQn_USB0, hpm_isr_usb0)
#ifdef HPM_USB1_BASE
SDK_DECLARE_EXT_ISR_M(IRQn_USB1, hpm_isr_usb1)
#endif
#endif
#ifdef CONFIG_USB_OTG_ENABLE
#include "usbotg_core.h"
int usb_otg_init(uint8_t busid)
{
(void)busid;
return 0;
}
int usb_otg_deinit(uint8_t busid)
{
(void)busid;
return 0;
}
void hpm_isr_usb0(void)
{
if (usb_otgsc_get_id_chg_flag(HPM_USB0)) {
usb_otgsc_clear_id_chg_flag(HPM_USB0);
usbotg_trigger_role_change(g_usb_hpm_busid[0], usb_otgsc_get_id_status(HPM_USB0) ? USBOTG_MODE_DEVICE : USBOTG_MODE_HOST);
}
USBOTG_IRQHandler(g_usb_hpm_busid[0]);
}
#ifdef HPM_USB1_BASE
void hpm_isr_usb1(void)
{
if (usb_otgsc_get_id_chg_flag(HPM_USB1)) {
usb_otgsc_clear_id_chg_flag(HPM_USB1);
usbotg_trigger_role_change(g_usb_hpm_busid[1], usb_otgsc_get_id_status(HPM_USB1) ? USBOTG_MODE_DEVICE : USBOTG_MODE_HOST);
}
USBOTG_IRQHandler(g_usb_hpm_busid[1]);
}
#endif
#else
void hpm_isr_usb0(void)
{
g_usb_hpm_irq[0](g_usb_hpm_busid[0]);
}
#ifdef HPM_USB1_BASE
void hpm_isr_usb1(void)
{
g_usb_hpm_irq[1](g_usb_hpm_busid[1]);
}
#endif
#endif
ATTR_WEAK void hpm_usb_isr_enable(uint32_t base)
{
if (base == HPM_USB0_BASE) {
intc_m_enable_irq(IRQn_USB0);
} else {
#ifdef HPM_USB1_BASE
intc_m_enable_irq(IRQn_USB1);
#endif
}
}
ATTR_WEAK void hpm_usb_isr_disable(uint32_t base)
{
if (base == HPM_USB0_BASE) {
intc_m_disable_irq(IRQn_USB0);
} else {
#ifdef HPM_USB1_BASE
intc_m_disable_irq(IRQn_USB1);
#endif
}
}
#ifdef CONFIG_USB_DCACHE_ENABLE
void usb_dcache_clean(uintptr_t addr, size_t size)
{
l1c_dc_writeback(addr, size);
}
void usb_dcache_invalidate(uintptr_t addr, size_t size)
{
l1c_dc_invalidate(addr, size);
}
void usb_dcache_flush(uintptr_t addr, size_t size)
{
l1c_dc_flush(addr, size);
}
#endif
|