mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
20a677fd63
Randy Dunlap <rdunlap@infradead.org> reported this problem on i386: > drivers/built-in.o: In function `ci_hdrc_host_init': > (.text+0x2ce75c): undefined reference to `ehci_init_driver' > > When USB_EHCI_HCD=m and USB_CHIPIDEA=y. In fact, this problem is existed on all platforms which are using chipidea driver. The root cause of this problem is the chipidea host uses symbol exported from ehci-hcd, but chipidea core does not depends on USB_EHCI_HCD. So, chipidea driver will not be compiled as module if USB_EHCI_HCD=m. It is very hard to give a perfect solution since chipidea core depends on USB || USB_GADGET, and chipdiea host depends on both USB_EHCI_HCD and USB_CHIPIDEA, the same problem exists for gadget. To fix this problem, we had to have below assumptions: - If USB_EHCI_HCD=y && USB_GADGET=y, USB_CHIPIDEA can be 'y'. - If USB_EHCI_HCD=m && USB_GADGET=y, USB_CHIPIDEA=m or USB_CHIPIDEA_HOST can't be seen if USB_CHIPIDEA=y. It will cause compile error due to no glue layer for ehci: > error: #error "missing bus glue for ehci-hcd" So, we had to compile USB_CHIPIDEA=m if USB_EHCI_HCD=m, current ehci hcd core guarantee it. - If USB_EHCI_HCD=y && USB_GADGET=m, USB_CHIPIDEA=m or USB_CHIPIDEA_UDC can't be seen if USB_CHIPIDEA=y. Of cos, the gadget will out of working at this situation, so the user had to compile USB_CHIPIDEA=m. - USB_EHCI_HCD=m && USB_GADGET=m, we can't see USB_CHIPIDEA_HOST and USB_CHIPIDEA_UDC unless USB_CHIPIDEA=m. The reason why it has above assumptions: - If both ehci core and gadget core build as module, the chipidea has to build as module. - If one of ehci core or gadget core is built in, another is built as module, we can only enable the function which is built in, or enable both roles as modules (USB_CHIPIDEA=m), since chipidea core driver takes care of both host and device roles. Signed-off-by: Peter Chen <peter.chen@freescale.com> Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
35 lines
916 B
Plaintext
35 lines
916 B
Plaintext
config USB_CHIPIDEA
|
|
tristate "ChipIdea Highspeed Dual Role Controller"
|
|
depends on USB || USB_GADGET
|
|
help
|
|
Say Y here if your system has a dual role high speed USB
|
|
controller based on ChipIdea silicon IP. Currently, only the
|
|
peripheral mode is supported.
|
|
|
|
When compiled dynamically, the module will be called ci-hdrc.ko.
|
|
|
|
if USB_CHIPIDEA
|
|
|
|
config USB_CHIPIDEA_UDC
|
|
bool "ChipIdea device controller"
|
|
depends on USB_GADGET=y || USB_CHIPIDEA=m
|
|
help
|
|
Say Y here to enable device controller functionality of the
|
|
ChipIdea driver.
|
|
|
|
config USB_CHIPIDEA_HOST
|
|
bool "ChipIdea host controller"
|
|
depends on USB=y
|
|
depends on USB_EHCI_HCD=y || USB_CHIPIDEA=m
|
|
select USB_EHCI_ROOT_HUB_TT
|
|
help
|
|
Say Y here to enable host controller functionality of the
|
|
ChipIdea driver.
|
|
|
|
config USB_CHIPIDEA_DEBUG
|
|
bool "ChipIdea driver debug"
|
|
help
|
|
Say Y here to enable debugging output of the ChipIdea driver.
|
|
|
|
endif
|