diff --git a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts index 3427d06707afd..832e025a8a6d3 100644 --- a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts +++ b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.dts @@ -26,6 +26,7 @@ zephyr,shell-uart = &lpuart2; zephyr,sram = &dram; zephyr,canbus = &flexcan2; + zephyr,usb-device = &usb1; }; cpus { @@ -149,3 +150,7 @@ &wdog4 { status = "okay"; }; + +zephyr_udc0: &usb1 { + status = "okay"; +}; diff --git a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.yaml b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.yaml index d39dfc8bf7324..1ed4d2611fd4e 100644 --- a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.yaml +++ b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55.yaml @@ -20,6 +20,7 @@ supported: - can - net - watchdog + - usb_device testing: ignore_tags: - bluetooth diff --git a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55_defconfig b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55_defconfig index 46119bc58ceb0..ede63a3a31269 100644 --- a/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55_defconfig +++ b/boards/nxp/frdm_imx93/frdm_imx93_mimx9352_a55_defconfig @@ -28,3 +28,6 @@ CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_CLOCK_CONTROL=y + +# USB Except +CONFIG_UDC_WORKQUEUE=n diff --git a/drivers/clock_control/clock_control_mcux_ccm_rev2.c b/drivers/clock_control/clock_control_mcux_ccm_rev2.c index 8923209a45b99..9867f4c3939f1 100644 --- a/drivers/clock_control/clock_control_mcux_ccm_rev2.c +++ b/drivers/clock_control/clock_control_mcux_ccm_rev2.c @@ -9,6 +9,9 @@ #include #include #include +#if defined(CONFIG_SOC_MIMX9352_A55) +#include +#endif #define LOG_LEVEL CONFIG_CLOCK_CONTROL_LOG_LEVEL #include @@ -182,6 +185,27 @@ static int mcux_ccm_get_subsys_rate(const struct device *dev, break; #endif +#if defined(CONFIG_SOC_MIMX9352_A55) + case IMX_CCM_MEDIA_AXI_CLK: + clock_root = kCLOCK_Root_MediaAxi; + break; + case IMX_CCM_MEDIA_APB_CLK: + clock_root = kCLOCK_Root_MediaApb; + break; + case IMX_CCM_MEDIA_DISP_PIX_CLK: + clock_root = kCLOCK_Root_MediaDispPix; + break; + case IMX_CCM_MEDIA_LDB_CLK: + clock_root = kCLOCK_Root_MediaLdb; + break; + case IMX_CCM_MIPI_PHY_CFG_CLK: + clock_root = kCLOCK_Root_MipiPhyCfg; + break; + case IMX_CCM_CAM_PIX_CLK: + clock_root = kCLOCK_Root_CamPix; + break; +#endif + #if defined(CONFIG_SOC_MIMX9352) && defined(CONFIG_DAI_NXP_SAI) case IMX_CCM_SAI1_CLK: case IMX_CCM_SAI2_CLK: @@ -372,6 +396,22 @@ static int CCM_SET_FUNC_ATTR mcux_ccm_set_subsys_rate(const struct device *dev, return mipi_csi2rx_clock_set_freq(kCLOCK_Root_Csi2_Esc, clock_rate); #endif +#if defined(CONFIG_SOC_MIMX9352_A55) + case IMX_CCM_MEDIA_AXI_CLK: + case IMX_CCM_MEDIA_APB_CLK: + case IMX_CCM_MEDIA_DISP_PIX_CLK: + case IMX_CCM_MEDIA_LDB_CLK: + case IMX_CCM_MIPI_PHY_CFG_CLK: + case IMX_CCM_CAM_PIX_CLK: + return common_clock_set_freq(clock_name, (uint32_t)clock_rate); +#endif + +#if defined(CONFIG_UDC_NXP_EHCI) && defined(CONFIG_SOC_MIMX9352_A55) + case IMX_CCM_USB_CLK: + case IMX_CCM_USB_PHY_CLK: + return common_clock_set_freq(clock_name, (uint32_t)clock_rate); +#endif + default: /* Silence unused variable warning */ ARG_UNUSED(clock_rate); diff --git a/drivers/usb/udc/udc_mcux_ehci.c b/drivers/usb/udc/udc_mcux_ehci.c index 041f9b759b199..9a0b42da899b1 100644 --- a/drivers/usb/udc/udc_mcux_ehci.c +++ b/drivers/usb/udc/udc_mcux_ehci.c @@ -1,19 +1,21 @@ /* - * Copyright 2024 NXP + * Copyright 2024-2025 NXP * * SPDX-License-Identifier: Apache-2.0 */ #define DT_DRV_COMPAT nxp_ehci -#include #include #include +#include +#include #include #include #include #include #include +#include #include "udc_common.h" #include "usb.h" @@ -34,6 +36,10 @@ LOG_MODULE_REGISTER(udc_mcux, CONFIG_UDC_DRIVER_LOG_LEVEL); #define PRV_DATA_HANDLE(_handle) CONTAINER_OF(_handle, struct udc_mcux_data, mcux_device) +/* Required by DEVICE_MMIO_NAMED_* macros */ +#define DEV_CFG(_dev) ((const struct udc_mcux_config *)(_dev)->config) +#define DEV_DATA(_dev) ((struct udc_mcux_data *)(udc_get_private(_dev))) + struct udc_mcux_config { const usb_device_controller_interface_struct_t *mcux_if; void (*irq_enable_func)(const struct device *dev); @@ -41,12 +47,19 @@ struct udc_mcux_config { size_t num_of_eps; struct udc_ep_config *ep_cfg_in; struct udc_ep_config *ep_cfg_out; - uintptr_t base; + DEVICE_MMIO_NAMED_ROM(reg_base); const struct pinctrl_dev_config *pincfg; usb_phy_config_struct_t *phy_config; + const struct device *usb_clock_dev; + clock_control_subsys_t usb_clock_subsys; + clock_control_subsys_rate_t usb_clock_rate; + const struct device *usbphy_clock_dev; + clock_control_subsys_t usbphy_clock_subsys; + clock_control_subsys_rate_t usbphy_clock_rate; }; struct udc_mcux_data { + DEVICE_MMIO_NAMED_RAM(reg_base); const struct device *dev; usb_device_struct_t mcux_device; struct k_work work; @@ -690,11 +703,14 @@ static int udc_mcux_init(const struct device *dev) const usb_device_controller_interface_struct_t *mcux_if = config->mcux_if; struct udc_mcux_data *priv = udc_get_private(dev); usb_status_t status; + uintptr_t base; if (priv->controller_id == 0xFFu) { return -ENOMEM; } + base = (uintptr_t)DEVICE_MMIO_NAMED_GET(dev, reg_base); + #ifdef CONFIG_DT_HAS_NXP_USBPHY_ENABLED if (config->phy_config != NULL) { USB_EhciPhyInit(priv->controller_id, 0u, config->phy_config); @@ -711,7 +727,7 @@ static int udc_mcux_init(const struct device *dev) /* enable USB interrupt */ config->irq_enable_func(dev); - LOG_DBG("Initialized USB controller %x", (uint32_t)config->base); + LOG_DBG("Initialized USB controller %x", (uint32_t)base); return 0; } @@ -735,9 +751,14 @@ static int udc_mcux_shutdown(const struct device *dev) return 0; } -static inline void udc_mcux_get_hal_driver_id(struct udc_mcux_data *priv, - const struct udc_mcux_config *config) +static inline void udc_mcux_get_hal_driver_id(const struct device *dev) { + struct udc_data *data = dev->data; + struct udc_mcux_data *priv = data->priv; + uintptr_t base; + + base = (uintptr_t)DEVICE_MMIO_NAMED_GET(dev, reg_base); + /* * MCUX USB controller drivers use an ID to tell the HAL drivers * which controller is being used. This part of the code converts @@ -752,7 +773,7 @@ static inline void udc_mcux_get_hal_driver_id(struct udc_mcux_data *priv, /* get the right controller id */ priv->controller_id = 0xFFu; /* invalid value */ for (uint8_t i = 0; i < ARRAY_SIZE(usb_base_addrs); i++) { - if (usb_base_addrs[i] == config->base) { + if (usb_base_addrs[i] == base) { priv->controller_id = kUSB_ControllerEhci0 + i; break; } @@ -766,11 +787,28 @@ static int udc_mcux_driver_preinit(const struct device *dev) struct udc_mcux_data *priv = data->priv; int err; - udc_mcux_get_hal_driver_id(priv, config); + DEVICE_MMIO_NAMED_MAP(dev, reg_base, K_MEM_CACHE_NONE | K_MEM_DIRECT_MAP); + + udc_mcux_get_hal_driver_id(dev); if (priv->controller_id == 0xFFu) { return -ENOMEM; } + if (config->usb_clock_dev && config->usb_clock_rate) { + clock_control_set_rate( + config->usb_clock_dev, + config->usb_clock_subsys, + config->usb_clock_rate + ); + } + if (config->usbphy_clock_dev && config->usbphy_clock_rate) { + clock_control_set_rate( + config->usbphy_clock_dev, + config->usbphy_clock_subsys, + config->usbphy_clock_rate + ); + } + k_mutex_init(&data->mutex); k_fifo_init(&priv->fifo); k_work_init(&priv->work, udc_mcux_work_handler); @@ -853,6 +891,42 @@ static const usb_device_controller_interface_struct_t udc_mcux_if = { USB_DeviceEhciRecv, USB_DeviceEhciCancel, USB_DeviceEhciControl }; +#define UDC_MCUX_CLK0_DEFINE(n) \ + .usb_clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR_BY_IDX(n, 0)), \ + .usb_clock_subsys = (clock_control_subsys_t) \ + DT_INST_CLOCKS_CELL_BY_IDX(n, 0, name), \ + .usb_clock_rate = (void *)(uintptr_t)DT_INST_PROP_BY_IDX(n, clock_rates, 0), + +#define UDC_MCUX_CLK0_DEFINE_NULL \ + .usb_clock_dev = NULL, \ + .usb_clock_subsys = NULL, \ + .usb_clock_rate = NULL, + +#define UDC_MCUX_CLK0_DEFINE_OR(n) \ + COND_CODE_1(DT_INST_CLOCKS_HAS_IDX(n, 0), \ + (COND_CODE_1(DT_INST_PROP_HAS_IDX(n, clock_rates, 0), \ + (UDC_MCUX_CLK0_DEFINE(n)), \ + (UDC_MCUX_CLK0_DEFINE_NULL))), \ + (UDC_MCUX_CLK0_DEFINE_NULL)) + +#define UDC_MCUX_CLK1_DEFINE(n) \ + .usbphy_clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR_BY_IDX(n, 1)), \ + .usbphy_clock_subsys = (clock_control_subsys_t) \ + DT_INST_CLOCKS_CELL_BY_IDX(n, 1, name), \ + .usbphy_clock_rate = (void *)(uintptr_t)DT_INST_PROP_BY_IDX(n, clock_rates, 1), + +#define UDC_MCUX_CLK1_DEFINE_NULL \ + .usbphy_clock_dev = NULL, \ + .usbphy_clock_subsys = NULL, \ + .usbphy_clock_rate = NULL, + +#define UDC_MCUX_CLK1_DEFINE_OR(n) \ + COND_CODE_1(DT_INST_CLOCKS_HAS_IDX(n, 1), \ + (COND_CODE_1(DT_INST_PROP_HAS_IDX(n, clock_rates, 1), \ + (UDC_MCUX_CLK1_DEFINE(n)), \ + (UDC_MCUX_CLK1_DEFINE_NULL))), \ + (UDC_MCUX_CLK1_DEFINE_NULL)) + #define UDC_MCUX_PHY_DEFINE(n) \ static usb_phy_config_struct_t phy_config_##n = { \ .D_CAL = DT_PROP_OR(DT_INST_PHANDLE(n, phy_handle), tx_d_cal, 0), \ @@ -898,7 +972,7 @@ static usb_phy_config_struct_t phy_config_##n = { \ PINCTRL_DT_INST_DEFINE(n); \ \ static struct udc_mcux_config priv_config_##n = { \ - .base = DT_INST_REG_ADDR(n), \ + DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \ .irq_enable_func = udc_irq_enable_func##n, \ .irq_disable_func = udc_irq_disable_func##n, \ .num_of_eps = DT_INST_PROP(n, num_bidir_endpoints), \ @@ -907,6 +981,8 @@ static usb_phy_config_struct_t phy_config_##n = { \ .mcux_if = &udc_mcux_if, \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .phy_config = UDC_MCUX_PHY_CFG_PTR_OR_NULL(n), \ + UDC_MCUX_CLK0_DEFINE_OR(n) \ + UDC_MCUX_CLK1_DEFINE_OR(n) \ }; \ \ static struct udc_mcux_data priv_data_##n = { \ diff --git a/dts/arm64/nxp/nxp_mimx93_a55.dtsi b/dts/arm64/nxp/nxp_mimx93_a55.dtsi index 99011e26237ca..c292871b0d2a0 100644 --- a/dts/arm64/nxp/nxp_mimx93_a55.dtsi +++ b/dts/arm64/nxp/nxp_mimx93_a55.dtsi @@ -554,6 +554,32 @@ prescaler = <1>; status = "disabled"; }; + + usb1: usbd@4c100000 { + compatible = "nxp,ehci"; + reg = <0x4c100000 DT_SIZE_K(4)>; + interrupts = ; + interrupt-names = "usb_0"; + interrupt-parent= <&gic>; + clocks = <&ccm IMX_CCM_USB_CLK 2 3>, + <&ccm IMX_CCM_USB_PHY_CLK 2 8>; + clock-rates = <134000000 50000000>; + num-bidir-endpoints = <8>; + status = "disabled"; + }; + + usb2: usbd@4c200000 { + compatible = "nxp,ehci"; + reg = <0x4c200000 DT_SIZE_K(4)>; + interrupts = ; + interrupt-names = "usb_1"; + interrupt-parent= <&gic>; + clocks = <&ccm IMX_CCM_USB_CLK 2 3>, + <&ccm IMX_CCM_USB_PHY_CLK 2 8>; + clock-rates = <134000000 50000000>; + num-bidir-endpoints = <8>; + status = "disabled"; + }; }; &gpio1 { diff --git a/dts/bindings/usb/nxp,ehci.yaml b/dts/bindings/usb/nxp,ehci.yaml index de4c8f25cba03..366548ab8c000 100644 --- a/dts/bindings/usb/nxp,ehci.yaml +++ b/dts/bindings/usb/nxp,ehci.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 NXP +# Copyright 2023,2025 NXP # SPDX-License-Identifier: Apache-2.0 description: NXP EHCI USB device mode @@ -10,3 +10,8 @@ include: "nxp,mcux-usbd.yaml" properties: phy-handle: type: phandle + + clock-rates: + type: array + description: | + Optional rate given to each clock provider in the "clocks" property. diff --git a/include/zephyr/dt-bindings/clock/imx_ccm_rev2.h b/include/zephyr/dt-bindings/clock/imx_ccm_rev2.h index 07843b65dfd39..14abced9c9b66 100644 --- a/include/zephyr/dt-bindings/clock/imx_ccm_rev2.h +++ b/include/zephyr/dt-bindings/clock/imx_ccm_rev2.h @@ -159,6 +159,10 @@ /* KPP */ #define IMX_CCM_KPP_CLK 0x2400UL +/* USB */ +#define IMX_CCM_USB_CLK 0x2500UL +#define IMX_CCM_USB_PHY_CLK 0x2600UL + /* QTMR */ #define IMX_CCM_QTMR_CLK 0x6000UL #define IMX_CCM_QTMR1_CLK 0x6000UL @@ -166,4 +170,12 @@ #define IMX_CCM_QTMR3_CLK 0x6002UL #define IMX_CCM_QTMR4_CLK 0x6003UL +/* MEDIA */ +#define IMX_CCM_MEDIA_AXI_CLK 0x3000UL +#define IMX_CCM_MEDIA_APB_CLK 0x3100UL +#define IMX_CCM_MEDIA_DISP_PIX_CLK 0x3200UL +#define IMX_CCM_MEDIA_LDB_CLK 0x3300UL +#define IMX_CCM_MIPI_PHY_CFG_CLK 0x3400UL +#define IMX_CCM_CAM_PIX_CLK 0x3500UL + #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_IMX_CCM_REV2_H_ */ diff --git a/modules/hal_nxp/mcux/mcux-sdk-ng/middleware/middleware.cmake b/modules/hal_nxp/mcux/mcux-sdk-ng/middleware/middleware.cmake index ca1e988a50c68..2bf1bfa84f86f 100644 --- a/modules/hal_nxp/mcux/mcux-sdk-ng/middleware/middleware.cmake +++ b/modules/hal_nxp/mcux/mcux-sdk-ng/middleware/middleware.cmake @@ -13,7 +13,7 @@ if(CONFIG_USB_DEVICE_DRIVER) set_variable_ifdef(CONFIG_USB_DC_NXP_LPCIP3511 CONFIG_MCUX_COMPONENT_middleware.usb.device.ip3511fs) # For soc.c build pass - zephyr_include_directories(.) + zephyr_include_directories(${CMAKE_CURRENT_LIST_DIR}) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/device) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/phy) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/include) @@ -30,13 +30,13 @@ if(CONFIG_UDC_DRIVER) set_variable_ifdef(CONFIG_UDC_NXP_IP3511 CONFIG_MCUX_COMPONENT_middleware.usb.device.ip3511fs) # For soc.c build pass - zephyr_include_directories(.) + zephyr_include_directories(${CMAKE_CURRENT_LIST_DIR}) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/device) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/phy) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/include) endif() -if (CONFIG_UHC_DRIVER) +if(CONFIG_UHC_DRIVER) zephyr_include_directories(middleware) set(CONFIG_MCUX_COMPONENT_middleware.usb.common_header ON) @@ -47,7 +47,7 @@ if (CONFIG_UHC_DRIVER) set_variable_ifdef(CONFIG_UHC_NXP_OHCI CONFIG_MCUX_COMPONENT_middleware.usb.host.ohci) set_variable_ifdef(CONFIG_UHC_NXP_IP3516HS CONFIG_MCUX_COMPONENT_middleware.usb.host.ip3516hs) # For soc.c build pass - zephyr_include_directories(.) + zephyr_include_directories(${CMAKE_CURRENT_LIST_DIR}) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/phy) zephyr_include_directories(${MCUX_SDK_NG_DIR}/middleware/usb/include) endif() diff --git a/samples/subsys/usb/legacy/audio_headphones_microphone/src/main.c b/samples/subsys/usb/legacy/audio_headphones_microphone/src/main.c index c70715ee74121..88eaa31910bf2 100644 --- a/samples/subsys/usb/legacy/audio_headphones_microphone/src/main.c +++ b/samples/subsys/usb/legacy/audio_headphones_microphone/src/main.c @@ -29,7 +29,7 @@ static void data_received(const struct device *dev, return; } - LOG_DBG("Received %d data, buffer %p", size, buffer); + LOG_DBG("Received %zu data, buffer %p", size, buffer); /* Check if OUT device buffer can be used for IN device */ if (size == usb_audio_get_in_frame_size(mic_dev)) { diff --git a/samples/subsys/usb/legacy/audio_headset/src/main.c b/samples/subsys/usb/legacy/audio_headset/src/main.c index 637cf3b64b3a4..dd4b8a55f4efd 100644 --- a/samples/subsys/usb/legacy/audio_headset/src/main.c +++ b/samples/subsys/usb/legacy/audio_headset/src/main.c @@ -27,7 +27,7 @@ static void data_received(const struct device *dev, return; } - LOG_DBG("Received %d data, buffer %p", size, buffer); + LOG_DBG("Received %zu data, buffer %p", size, buffer); /* Check if the device OUT buffer can be used for input */ if (size == usb_audio_get_in_frame_size(dev)) { diff --git a/soc/nxp/imx/imx9/imx93/CMakeLists.txt b/soc/nxp/imx/imx9/imx93/CMakeLists.txt index 0ddfb39b65d0c..535142d6a366d 100644 --- a/soc/nxp/imx/imx9/imx93/CMakeLists.txt +++ b/soc/nxp/imx/imx9/imx93/CMakeLists.txt @@ -5,6 +5,7 @@ if(CONFIG_SOC_MIMX9352_A55) zephyr_include_directories(a55) zephyr_sources_ifdef(CONFIG_ARM_MMU a55/mmu_regions.c) + zephyr_sources(common_clock_set.c) set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm64/scripts/linker.ld CACHE INTERNAL "") elseif(CONFIG_SOC_MIMX9352_M33) diff --git a/soc/nxp/imx/imx9/imx93/a55/soc.h b/soc/nxp/imx/imx9/imx93/a55/soc.h index 44bd6f78b3c5a..a4c936a3cf9e0 100644 --- a/soc/nxp/imx/imx9/imx93/a55/soc.h +++ b/soc/nxp/imx/imx9/imx93/a55/soc.h @@ -7,5 +7,8 @@ #ifndef _SOC_NXP_IMX_IMX93_A55_SOC_H_ #define _SOC_NXP_IMX_IMX93_A55_SOC_H_ +#include + +uint32_t common_clock_set_freq(uint32_t clock_name, uint32_t rate); #endif /* _SOC_NXP_IMX_IMX93_A55_SOC_H_ */ diff --git a/soc/nxp/imx/imx9/imx93/common_clock_set.c b/soc/nxp/imx/imx9/imx93/common_clock_set.c new file mode 100644 index 0000000000000..8943e2727e589 --- /dev/null +++ b/soc/nxp/imx/imx9/imx93/common_clock_set.c @@ -0,0 +1,81 @@ +/* + * Copyright 2025 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include + +LOG_MODULE_REGISTER(imx93_common_clock_set, CONFIG_SOC_LOG_LEVEL); + +uint32_t common_clock_set_freq(uint32_t clock_name, uint32_t rate) +{ + clock_name_t root; + uint32_t root_rate; + clock_root_t clk_root; + clock_lpcg_t clk_gate; + uint32_t divider; + + switch (clock_name) { + case IMX_CCM_MEDIA_AXI_CLK: + clk_root = kCLOCK_Root_MediaAxi; + clk_gate = kCLOCK_IpInvalid; + CLOCK_SetRootClockMux(kCLOCK_Root_MediaAxi, + kCLOCK_MEDIAAXI_ClockRoot_MuxSysPll1Pfd1); + break; + case IMX_CCM_MEDIA_APB_CLK: + clk_root = kCLOCK_Root_MediaApb; + clk_gate = kCLOCK_IpInvalid; + CLOCK_SetRootClockMux(kCLOCK_Root_MediaApb, + kCLOCK_MEDIAAPB_ClockRoot_MuxSysPll1Pfd1Div2); + break; + case IMX_CCM_MEDIA_DISP_PIX_CLK: + clk_root = kCLOCK_Root_MediaDispPix; + clk_gate = kCLOCK_Lcdif; + CLOCK_SetRootClockMux(kCLOCK_Root_MediaDispPix, + kCLOCK_MEDIADISPPIX_ClockRoot_MuxVideoPll1Out); + break; + case IMX_CCM_MEDIA_LDB_CLK: + clk_root = kCLOCK_Root_MediaLdb; + clk_gate = kCLOCK_Lvds; + CLOCK_SetRootClockMux(kCLOCK_Root_MediaLdb, + kCLOCK_MEDIALDB_ClockRoot_MuxVideoPll1Out); + break; + case IMX_CCM_MIPI_PHY_CFG_CLK: + clk_root = kCLOCK_Root_MipiPhyCfg; + clk_gate = kCLOCK_Mipi_Dsi; + break; + case IMX_CCM_CAM_PIX_CLK: + clk_root = kCLOCK_Root_CamPix; + clk_gate = kCLOCK_Mipi_Csi; + CLOCK_SetRootClockMux(kCLOCK_Root_CamPix, + kCLOCK_MEDIALDB_ClockRoot_MuxVideoPll1Out); + break; + default: + return -ENOTSUP; + } + + root = CLOCK_GetRootClockSource(clk_root, CLOCK_GetRootClockMux(clk_root)); + root_rate = g_clockSourceFreq[root]; + divider = ((root_rate + (rate - 1)) / rate); + + LOG_DBG("clock_name: 0x%x, root_rate: %d, divider: %d", clock_name, root_rate, divider); + + if (clk_gate < kCLOCK_IpInvalid) { + CLOCK_DisableClock(clk_gate); + } + + CLOCK_SetRootClockDiv(clk_root, divider); + CLOCK_PowerOnRootClock(clk_root); + + if (clk_gate < kCLOCK_IpInvalid) { + CLOCK_EnableClock(clk_gate); + } + + return 0; +} diff --git a/subsys/usb/device/class/audio/audio.c b/subsys/usb/device/class/audio/audio.c index 5d81f5b820662..59e6e0e1158e5 100644 --- a/subsys/usb/device/class/audio/audio.c +++ b/subsys/usb/device/class/audio/audio.c @@ -902,7 +902,7 @@ int usb_audio_send(const struct device *dev, struct net_buf *buffer, } if (len > buffer->size) { - LOG_ERR("Cannot send %d bytes, to much data", len); + LOG_ERR("Cannot send %zu bytes, to much data", len); return -EINVAL; } diff --git a/subsys/usb/device/class/netusb/function_rndis.c b/subsys/usb/device/class/netusb/function_rndis.c index 1491b6ee10641..e926f5d2d9a68 100644 --- a/subsys/usb/device/class/netusb/function_rndis.c +++ b/subsys/usb/device/class/netusb/function_rndis.c @@ -931,7 +931,7 @@ static int rndis_send(struct net_pkt *pkt) size_t len = net_pkt_get_len(pkt); int ret; - LOG_DBG("send pkt %p len %u", pkt, len); + LOG_DBG("send pkt %p len %zu", pkt, len); if (rndis.media_status == RNDIS_OBJECT_ID_MEDIA_DISCONNECTED) { LOG_DBG("Media disconnected, drop pkt %p", pkt); diff --git a/subsys/usb/device_next/usbd_ch9.c b/subsys/usb/device_next/usbd_ch9.c index 599eb16117889..45c49fa09fdfe 100644 --- a/subsys/usb/device_next/usbd_ch9.c +++ b/subsys/usb/device_next/usbd_ch9.c @@ -590,7 +590,7 @@ static void string_ascii7_to_utf16le(struct usbd_desc_node *const dn, ascii7_str = (uint8_t *)dn->ptr; } - LOG_DBG("wLength %u, bLength %u, tailroom %u", + LOG_DBG("wLength %u, bLength %u, tailroom %zu", wLength, head.bLength, net_buf_tailroom(buf)); len = MIN(net_buf_tailroom(buf), MIN(head.bLength, wLength)); @@ -771,8 +771,7 @@ static int sreq_get_desc_bos(struct usbd_context *const uds_ctx, desc_fill_bos_root(uds_ctx, &bos); len = MIN(net_buf_tailroom(buf), MIN(setup->wLength, bos.wTotalLength)); - - LOG_DBG("wLength %u, bLength %u, wTotalLength %u, tailroom %u", + LOG_DBG("wLength %u, bLength %u, wTotalLength %u, tailroom %zu", setup->wLength, bos.bLength, bos.wTotalLength, net_buf_tailroom(buf)); net_buf_add_mem(buf, &bos, MIN(len, bos.bLength)); @@ -784,7 +783,7 @@ static int sreq_get_desc_bos(struct usbd_context *const uds_ctx, SYS_DLIST_FOR_EACH_CONTAINER(&uds_ctx->descriptors, desc_nd, node) { if (desc_nd->bDescriptorType == USB_DESC_BOS) { - LOG_DBG("bLength %u, len %u, tailroom %u", + LOG_DBG("bLength %u, len %zu, tailroom %zu", desc_nd->bLength, len, net_buf_tailroom(buf)); net_buf_add_mem(buf, desc_nd->ptr, MIN(len, desc_nd->bLength)); diff --git a/west.yml b/west.yml index 8ddf3001a042d..90afd24e82500 100644 --- a/west.yml +++ b/west.yml @@ -210,7 +210,7 @@ manifest: groups: - hal - name: hal_nxp - revision: 4377ecfba52fe0ff7352eadf426b523ed3e1d27f + revision: pull/615/head path: modules/hal/nxp groups: - hal