zephyr/drivers/usb/device/Kconfig
Emil Obalski 773f02e6e9 usb: drivers: Fix ZLP handling for Nordic driver.
ZLP - zero length packet is used to indicate that the device
has no more data to send. If the Host asks for more data that the
device can provide and the data size is mutliplication of Endpoint
wMaxPacketSize then the device must terminate the data transfer
with ZLP.

Until this patch Nordic device driver controller was not aware of
the requested data length and could not determine when the ZLP was
required.

This patch introduces a fix that prevents the driver from starting
setup stage before the ZLP is being send.

For consistance with the Zephyr USB stack sending ZLP must be
issued from the stack level. Making trans_zlp flag true results
in blocking the driver from starting setup stage without required
ZLP.

After the data transfer finishes the driver will be prepared for ZLP
and will call back the stack to start writing ZLP. After the ZLP
is being send the driver will automatically start status stage and
end the Control Transfer.

This patch also removes CONFIG_USB_DEVICE_DISABLE_ZLP_EPIN_HANDLING
and aligns Nordic driver with others.

Without this patch the issue could occur when handling get requests.
Typical case is string descriptor of length equal to wMaxPacketSize.
Hosts usually asks for wLength = 255 Bytes when string descriptors
are being requested. In that case to successfully finish the data
stage of the Control transfer the device must send wMacPacketSize
Bytes of actual string descriptor and then ZLP to indicate that no
more data are present. After ZLP the status stage may start and the
request is finished successfully.

Without this patch the driver will not send ZLP making it unable
to end the Control Request successful - this may lead to failing
'Device Descriptor Test' from USB3CV test tool.

Signed-off-by: Emil Obalski <emil.obalski@nordicsemi.no>
2020-11-17 18:06:26 +01:00

110 lines
2.7 KiB
Plaintext

# USB device configuration options
# Copyright (c) 2016 Wind River Systems, Inc.
# SPDX-License-Identifier: Apache-2.0
if USB
config USB_DEVICE_DRIVER
bool
config USB_DW
bool "Designware USB Device Controller Driver"
select USB_DEVICE_DRIVER
help
Designware USB Device Controller Driver.
config USB_DW_USB_2_0
bool "DesignWare Controller and PHY support for USB specification 2.0"
depends on USB_DW
help
Indicates whether or not USB specification version 2.0 is supported
config USB_DC_STM32
bool "USB device controller driver for STM32 devices"
depends on SOC_FAMILY_STM32
select USB_DEVICE_DRIVER
select USE_STM32_LL_USB
select USE_STM32_HAL_PCD
select USE_STM32_HAL_PCD_EX
help
Enable USB support on the STM32 F0, F1, F2, F3, F4, F7, L0, L4 and G4 family of
processors.
config USB_DC_SAM0
bool "SAM0 series USB Device Controller driver"
default y
depends on SOC_FAMILY_SAM0
select USB_DEVICE_DRIVER
help
SAM0 family USB device controller Driver.
config USB_DC_SAM
bool "SAM series USB HS Device Controller driver"
depends on SOC_SERIES_SAME70 || \
SOC_SERIES_SAMV71
select USB_DEVICE_DRIVER
help
SAM family USB HS device controller Driver.
menuconfig USB_NRFX
bool "Nordic Semiconductor USB Device Controller Driver"
default y
depends on HAS_HW_NRF_USBD
select USB_DEVICE_DRIVER
select NRFX_USBD
select NRFX_POWER
help
nRF USB Device Controller Driver
config USB_NRFX_EVT_QUEUE_SIZE
int "USBD event queue size"
range 4 64
default 32
depends on USB_NRFX
help
Size of the driver's internal event queue.
Required size will depend on number of endpoints (class instances) in use.
config USB_NRFX_WORK_QUEUE_STACK_SIZE
int "USBD work queue stack size"
default 1024
depends on USB_NRFX
help
Size of the stack for the work queue thread that is used in the driver
for handling the events from the USBD ISR, i.e. executing endpoint
callbacks and providing proper notifications to the USB device stack.
config USB_KINETIS
bool "Kinetis USB Device Controller Driver"
select USB_DEVICE_DRIVER
help
Kinetis USB Device Controller Driver.
config USB_DC_NXP_EHCI
bool "Kinetis and RT EHCI USB Device Controller Driver"
depends on HAS_MCUX_USB_EHCI
select USB_DEVICE_DRIVER
select NOCACHE_MEMORY if HAS_MCUX_CACHE
help
Kinetis and RT EHCI USB Device Controller Driver.
module = USB_DRIVER
module-str = usb driver
source "subsys/logging/Kconfig.template.log_config"
config USB_DC_STM32_DISCONN_ENABLE
bool
depends on USB_DC_STM32
help
Say Y if your board uses USB DISCONNECT pin to enable the
pull-up resistor on USB DP.
config USB_NATIVE_POSIX
bool "Native Posix USB Device Controller Driver"
select USB_DEVICE_DRIVER
help
Native Posix USB Device Controller Driver.
endif # USB