diff --git a/bsp/rockchip/rk3500/driver/Kconfig b/bsp/rockchip/rk3500/driver/Kconfig index 172bbd0ffb9..d0730821614 100644 --- a/bsp/rockchip/rk3500/driver/Kconfig +++ b/bsp/rockchip/rk3500/driver/Kconfig @@ -2,6 +2,5 @@ menu "RT-Thread rockchip RK3500 drivers" source "$BSP_DIR/driver/clk/Kconfig" source "$BSP_DIR/driver/uart8250/Kconfig" -source "$BSP_DIR/driver/reset/Kconfig" source "$BSP_DIR/driver/hwtimer/Kconfig" endmenu diff --git a/bsp/rockchip/rk3500/driver/clk/clk-rk3568.c b/bsp/rockchip/rk3500/driver/clk/clk-rk3568.c index 41522848035..4672e897609 100644 --- a/bsp/rockchip/rk3500/driver/clk/clk-rk3568.c +++ b/bsp/rockchip/rk3500/driver/clk/clk-rk3568.c @@ -21,22 +21,6 @@ #define CPLL_HZ (1000 * MHZ) #define PPLL_HZ (100 * MHZ) -#define rt_abs(x) \ -({ \ - long ret; \ - if (sizeof(x) == sizeof(long)) \ - { \ - long __x = (x); \ - ret = (__x < 0) ? -__x : __x; \ - } \ - else \ - { \ - int __x = (x); \ - ret = (__x < 0) ? -__x : __x; \ - } \ - ret; \ -}) - struct rk_pll { rt_uint32_t con0; @@ -120,6 +104,13 @@ enum rk_clk_type rk_clk_type_pmuclk, }; +struct rt_reset_controller_clk_node +{ + struct rt_clk_node parent; + + struct rt_reset_controller rstcer; +}; + struct rk_clk { struct rt_reset_controller_clk_node parent; diff --git a/bsp/rockchip/rk3500/driver/clk/clk-rk3568.h b/bsp/rockchip/rk3500/driver/clk/clk-rk3568.h index 94df053702c..710d3211f6e 100644 --- a/bsp/rockchip/rk3500/driver/clk/clk-rk3568.h +++ b/bsp/rockchip/rk3500/driver/clk/clk-rk3568.h @@ -14,7 +14,6 @@ #include #include #include -#include "reset/reset.h" #include #include "../rockchip.h" diff --git a/bsp/rockchip/rk3500/driver/clk/clk-rk3588.c b/bsp/rockchip/rk3500/driver/clk/clk-rk3588.c index 4bcd21d5bea..a25e2e8d4f2 100644 --- a/bsp/rockchip/rk3500/driver/clk/clk-rk3588.c +++ b/bsp/rockchip/rk3500/driver/clk/clk-rk3588.c @@ -89,6 +89,12 @@ struct rk3588_clk_platform_data rt_uint32_t id; void *base; }; +struct rt_reset_controller_clk_node +{ + struct rt_clk_node parent; + + struct rt_reset_controller rstcer; +}; struct rk3588_clk { struct rt_reset_controller_clk_node parent; diff --git a/bsp/rockchip/rk3500/driver/clk/clk-rk3588.h b/bsp/rockchip/rk3500/driver/clk/clk-rk3588.h index 0aad2ea2f36..5a8a3152a7f 100644 --- a/bsp/rockchip/rk3500/driver/clk/clk-rk3588.h +++ b/bsp/rockchip/rk3500/driver/clk/clk-rk3588.h @@ -14,7 +14,6 @@ #include #include #include -#include "reset/reset.h" #include #include "../rockchip.h" diff --git a/bsp/rockchip/rk3500/driver/hwtimer/hwtimer-rockchip_timer.c b/bsp/rockchip/rk3500/driver/hwtimer/hwtimer-rockchip_timer.c index 5c884cb81b4..b5213efa8af 100644 --- a/bsp/rockchip/rk3500/driver/hwtimer/hwtimer-rockchip_timer.c +++ b/bsp/rockchip/rk3500/driver/hwtimer/hwtimer-rockchip_timer.c @@ -390,4 +390,4 @@ static int rk_timer_drv_register(void) return 0; } -INIT_DRIVER_EARLY_EXPORT(rk_timer_drv_register); +INIT_PLATFORM_EXPORT(rk_timer_drv_register); diff --git a/bsp/rockchip/rk3500/driver/reset/Kconfig b/bsp/rockchip/rk3500/driver/reset/Kconfig deleted file mode 100644 index a183ce7ed03..00000000000 --- a/bsp/rockchip/rk3500/driver/reset/Kconfig +++ /dev/null @@ -1,5 +0,0 @@ -config RT_USING_RESET - bool "Using Reset Controller support" - depends on RT_USING_DM - select RT_USING_OFW - default n diff --git a/bsp/rockchip/rk3500/driver/reset/SConscript b/bsp/rockchip/rk3500/driver/reset/SConscript deleted file mode 100755 index 7809084a4b7..00000000000 --- a/bsp/rockchip/rk3500/driver/reset/SConscript +++ /dev/null @@ -1,13 +0,0 @@ -from building import * - -cwd = GetCurrentDir() -CPPPATH = [cwd] - -src = [] - -if GetDepend(['RT_USING_RESET']): - src += ['reset.c'] - -group = DefineGroup('DeviceDrivers', src, depend = [''], CPPPATH = CPPPATH) - -Return('group') diff --git a/bsp/rockchip/rk3500/driver/reset/reset.c b/bsp/rockchip/rk3500/driver/reset/reset.c deleted file mode 100644 index 3dadcc4735d..00000000000 --- a/bsp/rockchip/rk3500/driver/reset/reset.c +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Copyright (c) 2006-2024 RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2022-11-26 GuEe-GUI first version - */ - -#include -#include - -#define DBG_TAG "rtdm.reset" -#define DBG_LVL DBG_INFO -#include - -#include -#include "reset.h" - -struct reset_control_array -{ - struct rt_reset_control captain; - - rt_size_t count; - struct rt_reset_control *rstcs[]; -}; - -#define reset_control_to_array(rstc) rt_container_of(rstc, struct reset_control_array, captain) - -static struct rt_spinlock _rstcer_lock = { 0 }; -static rt_list_t _rstcer_nodes = RT_LIST_OBJECT_INIT(_rstcer_nodes); - -rt_err_t rt_reset_controller_register(struct rt_reset_controller *rstcer) -{ - rt_ubase_t level; - - if (!rstcer) - { - return -RT_EINVAL; - } - - rt_list_init(&rstcer->list); - rt_list_init(&rstcer->rstc_nodes); - rt_spin_lock_init(&rstcer->spinlock); - - level = rt_spin_lock_irqsave(&_rstcer_lock); - - rt_list_insert_after(&_rstcer_nodes, &rstcer->list); - - rt_spin_unlock_irqrestore(&_rstcer_lock, level); - - if (rstcer->ofw_node) - { - if (!rt_ofw_data(rstcer->ofw_node)) - { - rt_ofw_data(rstcer->ofw_node) = rstcer; - } - } - - return RT_EOK; -} - -rt_err_t rt_reset_controller_unregister(struct rt_reset_controller *rstcer) -{ - if (rstcer) - { - rt_spin_lock(&_rstcer_lock); - - rt_list_remove(&rstcer->list); - - rt_spin_unlock(&_rstcer_lock); - - return RT_EOK; - } - - return -RT_EINVAL; -} - -rt_err_t rt_reset_control_reset(struct rt_reset_control *rstc) -{ - rt_err_t err; - - if (!rstc) - { - return -RT_EINVAL; - } - - if (rstc->rstcer->ops->reset) - { - if ((err = rstc->rstcer->ops->reset(rstc))) - { - return err; - } - } - - if (rstc->is_array) - { - struct reset_control_array *rstc_arr = reset_control_to_array(rstc); - - for (int i = 0; i < rstc_arr->count; ++i) - { - if ((err = rt_reset_control_reset(rstc_arr->rstcs[i]))) - { - return err; - } - } - } - - return RT_EOK; -} - -rt_err_t rt_reset_control_assert(struct rt_reset_control *rstc) -{ - rt_err_t err; - - if (!rstc) - { - return -RT_EINVAL; - } - - if (rstc->deassert && rstc->rstcer->ops->assert) - { - if ((err = rstc->rstcer->ops->assert(rstc))) - { - return err; - } - - rstc->deassert = RT_FALSE; - } - - if (rstc->is_array) - { - struct reset_control_array *rstc_arr = reset_control_to_array(rstc); - - for (int i = 0; i < rstc_arr->count; ++i) - { - if ((err = rt_reset_control_assert(rstc_arr->rstcs[i]))) - { - if (rstc->rstcer->ops->deassert) - { - rstc->rstcer->ops->deassert(rstc); - - rstc->deassert = RT_TRUE; - } - - while (i --> 0) - { - rt_reset_control_deassert(rstc_arr->rstcs[i]); - } - - return err; - } - } - } - - return RT_EOK; -} - -rt_err_t rt_reset_control_deassert(struct rt_reset_control *rstc) -{ - rt_err_t err; - - if (!rstc) - { - return -RT_EINVAL; - } - - if (!rstc->deassert && rstc->rstcer->ops->deassert) - { - if ((err = rstc->rstcer->ops->deassert(rstc))) - { - return err; - } - - rstc->deassert = RT_TRUE; - } - - if (rstc->is_array) - { - struct reset_control_array *rstc_arr = reset_control_to_array(rstc); - - for (int i = 0; i < rstc_arr->count; ++i) - { - if ((err = rt_reset_control_deassert(rstc_arr->rstcs[i]))) - { - if (rstc->rstcer->ops->assert) - { - rstc->rstcer->ops->assert(rstc); - - rstc->deassert = RT_FALSE; - } - - while (i --> 0) - { - rt_reset_control_assert(rstc_arr->rstcs[i]); - } - - return err; - } - } - } - - return RT_EOK; -} - -int rt_reset_control_status(struct rt_reset_control *rstc) -{ - if (!rstc) - { - return -RT_EINVAL; - } - - if (rstc->rstcer->ops->status) - { - return rstc->rstcer->ops->status(rstc); - } - - return -RT_ENOSYS; -} - -static void reset_free(struct rt_reset_control *rstc) -{ - if (rstc->is_array) - { - struct reset_control_array *rstc_arr = reset_control_to_array(rstc); - - for (int i = 0; i < rstc_arr->count; ++i) - { - rt_reset_control_put(rstc_arr->rstcs[i]); - } - } - - rt_free(rstc); -} - -struct rt_reset_control *rt_reset_control_get_array(struct rt_device *dev) -{ - return rt_ofw_get_reset_control_array(dev->ofw_node); -} - -struct rt_reset_control *rt_reset_control_get_by_index(struct rt_device *dev, int index) -{ - return rt_ofw_get_reset_control_by_index(dev->ofw_node, index); -} - -struct rt_reset_control *rt_reset_control_get_by_name(struct rt_device *dev, const char *name) -{ - return rt_ofw_get_reset_control_by_name(dev->ofw_node, name); -} - -void rt_reset_control_put(struct rt_reset_control *rstc) -{ - struct rt_reset_controller *rstcer; - - if (!rstc) - { - return; - } - - rstcer = rstc->rstcer; - - rt_spin_lock(&rstcer->spinlock); - - rt_list_remove(&rstc->list); - - rt_spin_unlock(&rstcer->spinlock); - - reset_free(rstc); -} - -static struct rt_reset_control *ofw_get_reset_control(struct rt_ofw_node *np, int index, - const char *name, rt_bool_t is_array) -{ - struct rt_reset_control *rstc; - struct rt_ofw_cell_args reset_args = {}; - struct rt_reset_controller *rstcer = RT_NULL; - - if (is_array) - { - rt_size_t rstc_nr; - struct reset_control_array *rstc_arr; - - rstc_nr = rt_ofw_count_phandle_cells(np, "resets", "#reset-cells"); - - if (!rstc_nr) - { - return RT_NULL; - } - - rstc_arr = rt_calloc(1, sizeof(*rstc_arr) + sizeof(struct rt_reset_control *) * rstc_nr); - - if (!rstc_arr) - { - LOG_E("No memory to create %s[%d] reset control", - rt_ofw_node_full_name(np), index); - - return RT_NULL; - } - - rstc_arr->count = rstc_nr - 1; - - for (int i = 0; i < rstc_arr->count; ++i) - { - rstc_arr->rstcs[i] = ofw_get_reset_control(np, i + 1, RT_NULL, RT_FALSE); - - if (!rstc_arr->rstcs[i]) - { - while (i --> 0) - { - rt_reset_control_put(rstc_arr->rstcs[i]); - } - - rt_free(rstc_arr); - rstc_arr = RT_NULL; - - return RT_NULL; - } - } - - rstc = &rstc_arr->captain; - rstc->is_array = RT_TRUE; - } - else - { - rstc = rt_calloc(1, sizeof(*rstc)); - - if (!rstc) - { - LOG_E("No memory to create %s[%d] reset control", - rt_ofw_node_full_name(np), index); - - return RT_NULL; - } - } - - if (!rt_ofw_parse_phandle_cells(np, "resets", "#reset-cells", index, &reset_args)) - { - void *rt_data = rt_ofw_data(reset_args.data); - - if (rt_data) - { - /* check is clk */ - if (rt_ofw_prop_read_bool(reset_args.data, "#clock-cells")) - { - struct rt_reset_controller_clk_node *rstcer_clk = rt_data; - - rstcer = &rstcer_clk->rstcer; - } - else - { - rstcer = rt_data; - } - } - - rt_ofw_node_put(reset_args.data); - } - - if (!rstcer) - { - goto _fail; - } - - if (!name && rt_ofw_prop_read_bool(np, "reset-names")) - { - rt_ofw_prop_read_string_index(np, "reset-names", index, &name); - } - - rstc->con_id = name; - rstc->rstcer = rstcer; - - if (rstcer->ops->ofw_parse) - { - rt_err_t err = rstcer->ops->ofw_parse(rstc, &reset_args); - - if (err) - { - LOG_E("Parse %s reset control error = %s", - rt_ofw_node_full_name(np), rt_strerror(err)); - - goto _fail; - } - } - - rstc->id = reset_args.args[0]; - - rt_list_init(&rstc->list); - - rt_spin_lock(&rstcer->spinlock); - - rt_list_insert_after(&rstcer->rstc_nodes, &rstc->list); - - rt_spin_unlock(&rstcer->spinlock); - - return rstc; - -_fail: - if (rstc && !rstc->is_array) - { - rt_free(rstc); - } - - return RT_NULL; -} - -struct rt_reset_control *rt_ofw_get_reset_control_array(struct rt_ofw_node *np) -{ - return ofw_get_reset_control(np, 0, RT_NULL, RT_TRUE); -} - -struct rt_reset_control *rt_ofw_get_reset_control_by_index(struct rt_ofw_node *np, int index) -{ - return ofw_get_reset_control(np, index, RT_NULL, RT_FALSE); -} - -struct rt_reset_control *rt_ofw_get_reset_control_by_name(struct rt_ofw_node *np, const char *name) -{ - if (np) - { - int index = rt_ofw_prop_index_of_string(np, "reset-names", name); - - if (index >= 0) - { - return ofw_get_reset_control(np, index, name, RT_FALSE); - } - } - - return RT_NULL; -} diff --git a/bsp/rockchip/rk3500/driver/reset/reset.h b/bsp/rockchip/rk3500/driver/reset/reset.h deleted file mode 100644 index 3f27d2b6c75..00000000000 --- a/bsp/rockchip/rk3500/driver/reset/reset.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2006-2024 RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2022-11-26 GuEe-GUI first version - */ - -#ifndef __RESET_H__ -#define __RESET_H__ - -#include -#include -#include -#include - -struct rt_reset_control_ops; - -struct rt_reset_controller -{ - rt_list_t list; - rt_list_t rstc_nodes; - - const char *name; - const struct rt_reset_control_ops *ops; - - struct rt_ofw_node *ofw_node; - void *priv; - - struct rt_spinlock spinlock; -}; - -/* - * It seems that most reset controllers are coupled to CLK. - * So we need a generic extends object. - */ -struct rt_reset_controller_clk_node -{ - struct rt_clk_node parent; - - struct rt_reset_controller rstcer; -}; - -struct rt_reset_control -{ - rt_list_t list; - - struct rt_reset_controller *rstcer; - - int id; - const char *con_id; - rt_bool_t is_array; - rt_bool_t deassert; - - void *priv; -}; - -struct rt_reset_control_ops -{ - /* - * rt_ofw_cell_args return: - * args[0] = rstc.id - */ - rt_err_t (*ofw_parse)(struct rt_reset_control *, struct rt_ofw_cell_args *args); - /* API */ - rt_err_t (*reset)(struct rt_reset_control *rstc); - rt_err_t (*assert)(struct rt_reset_control *rstc); - rt_err_t (*deassert)(struct rt_reset_control *rstc); - int (*status)(struct rt_reset_control *rstc); -}; - -rt_err_t rt_reset_controller_register(struct rt_reset_controller *rstcer); -rt_err_t rt_reset_controller_unregister(struct rt_reset_controller *rstcer); - -rt_err_t rt_reset_control_reset(struct rt_reset_control *rstc); -rt_err_t rt_reset_control_assert(struct rt_reset_control *rstc); -rt_err_t rt_reset_control_deassert(struct rt_reset_control *rstc); -int rt_reset_control_status(struct rt_reset_control *rstc); - -rt_ssize_t rt_reset_control_get_count(struct rt_device *dev); -struct rt_reset_control *rt_reset_control_get_array(struct rt_device *dev); -struct rt_reset_control *rt_reset_control_get_by_index(struct rt_device *dev, int index); -struct rt_reset_control *rt_reset_control_get_by_name(struct rt_device *dev, const char *name); -void rt_reset_control_put(struct rt_reset_control *rstc); - -struct rt_reset_control *rt_ofw_get_reset_control_array(struct rt_ofw_node *np); -struct rt_reset_control *rt_ofw_get_reset_control_by_index(struct rt_ofw_node *np, int index); -struct rt_reset_control *rt_ofw_get_reset_control_by_name(struct rt_ofw_node *np, const char *name); - -#endif /* __RESET_H__ */ diff --git a/bsp/rockchip/rk3500/driver/uart8250/8250-dw.c b/bsp/rockchip/rk3500/driver/uart8250/8250-dw.c index 98692c0b1fe..2df3086474d 100644 --- a/bsp/rockchip/rk3500/driver/uart8250/8250-dw.c +++ b/bsp/rockchip/rk3500/driver/uart8250/8250-dw.c @@ -338,4 +338,4 @@ static int dw8250_drv_register(void) return 0; } -INIT_DRIVER_EARLY_EXPORT(dw8250_drv_register); +INIT_PLATFORM_EXPORT(dw8250_drv_register); diff --git a/bsp/rockchip/rk3500/driver/uart8250/fiq-debugger.c b/bsp/rockchip/rk3500/driver/uart8250/fiq-debugger.c index c37315cb032..4cbd803d4f1 100644 --- a/bsp/rockchip/rk3500/driver/uart8250/fiq-debugger.c +++ b/bsp/rockchip/rk3500/driver/uart8250/fiq-debugger.c @@ -375,4 +375,4 @@ static int rockchip_fiq_debugger_drv_register(void) return 0; } -INIT_DRIVER_EARLY_EXPORT(rockchip_fiq_debugger_drv_register); +INIT_PLATFORM_EXPORT(rockchip_fiq_debugger_drv_register); diff --git a/components/drivers/Kconfig b/components/drivers/Kconfig index 7c65ae2c092..3ffa4c3f83b 100755 --- a/components/drivers/Kconfig +++ b/components/drivers/Kconfig @@ -25,8 +25,8 @@ rsource "led/Kconfig" rsource "mailbox/Kconfig" rsource "phye/Kconfig" rsource "ata/Kconfig" -rsource "block/Kconfig" rsource "nvme/Kconfig" +rsource "block/Kconfig" rsource "scsi/Kconfig" rsource "regulator/Kconfig" rsource "reset/Kconfig" diff --git a/components/drivers/ata/ahci.c b/components/drivers/ata/ahci.c index 1239a45f334..c8a191b24aa 100644 --- a/components/drivers/ata/ahci.c +++ b/components/drivers/ata/ahci.c @@ -510,13 +510,13 @@ static void ahci_isr(int irqno, void *param) { int id; rt_uint32_t isr; - bitmap_t int_map; + rt_bitmap_t int_map; struct rt_ahci_port *port; struct rt_ahci_host *host = param; int_map = HWREG32(host->regs + RT_AHCI_HBA_INTS); - bitmap_for_each_set_bit(&int_map, id, host->ports_nr) + rt_bitmap_for_each_set_bit(&int_map, id, host->ports_nr) { port = &host->ports[id]; @@ -535,7 +535,7 @@ static void ahci_isr(int irqno, void *param) HWREG32(port->regs + RT_AHCI_PORT_INTS) = isr; } - HWREG32(host->regs + RT_AHCI_HBA_INTS) = isr; + HWREG32(host->regs + RT_AHCI_HBA_INTS) = int_map; } rt_err_t rt_ahci_host_register(struct rt_ahci_host *host) diff --git a/components/drivers/block/blk.c b/components/drivers/block/blk.c index 2bfa78b1ef5..9f2659de6d5 100644 --- a/components/drivers/block/blk.c +++ b/components/drivers/block/blk.c @@ -195,6 +195,10 @@ static rt_err_t blk_control(rt_device_t dev, int cmd, void *args) { err = disk->ops->control(disk, RT_NULL, cmd, args); } + else + { + err = -RT_ENOSYS; + } break; } @@ -344,7 +348,7 @@ rt_err_t rt_hw_blk_disk_unregister(struct rt_blk_disk *disk) spin_lock(&disk->lock); - if (disk->parent.ref_count != 1) + if (disk->parent.ref_count > 0) { err = -RT_EBUSY; goto _unlock; @@ -470,7 +474,7 @@ INIT_ENV_EXPORT(blk_dfs_mnt_table); const char *convert_size(struct rt_device_blk_geometry *geome, rt_size_t sector_count, rt_size_t *out_cap, rt_size_t *out_minor) { - rt_size_t cap, minor; + rt_size_t cap, minor = 0; int size_index = 0; const char *size_name[] = { "B", "K", "M", "G", "T", "P", "E" }; diff --git a/components/drivers/include/drivers/core/dm.h b/components/drivers/include/drivers/core/dm.h index ced82d0c23b..1a3723a6507 100644 --- a/components/drivers/include/drivers/core/dm.h +++ b/components/drivers/include/drivers/core/dm.h @@ -17,6 +17,7 @@ #include #include #include +#include #ifndef RT_CPUS_NR #define RT_CPUS_NR 1 diff --git a/components/drivers/include/drivers/misc.h b/components/drivers/include/drivers/misc.h index 9579773e9a0..ea962a2cc84 100644 --- a/components/drivers/include/drivers/misc.h +++ b/components/drivers/include/drivers/misc.h @@ -34,6 +34,12 @@ (((__x) - ((__d) / 2)) / (__d)); \ }) +#define __KEY_PLACEHOLDER_1 0, +#define ____KEY_ENABLED(__ignored, val, ...) val +#define ___KEY_ENABLED(arg1_or_junk) ____KEY_ENABLED(arg1_or_junk 1, 0) +#define __KEY_ENABLED(value) ___KEY_ENABLED(__KEY_PLACEHOLDER_##value) +#define RT_KEY_ENABLED(key) __KEY_ENABLED(key) + #define RT_FIELD_PREP(mask, val) (((rt_uint64_t)(val) << (__rt_ffsl((mask)) - 1)) & (mask)) #define RT_FIELD_GET(mask, val) (((val) & (mask)) >> (__rt_ffsl((mask)) - 1)) @@ -107,6 +113,22 @@ _rem; \ }) +#define rt_abs(x) \ +({ \ + long ret; \ + if (sizeof(x) == sizeof(long)) \ + { \ + long __x = (x); \ + ret = (__x < 0) ? -__x : __x; \ + } \ + else \ + { \ + int __x = (x); \ + ret = (__x < 0) ? -__x : __x; \ + } \ + ret; \ +}) + #ifndef rt_ilog2 rt_inline int rt_ilog2(rt_ubase_t v) { diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h index 1f007630dfd..09f5e455f76 100644 --- a/components/drivers/include/rtdevice.h +++ b/components/drivers/include/rtdevice.h @@ -89,6 +89,16 @@ extern "C" { #include "drivers/pic.h" #endif /* RT_USING_PIC */ +#ifdef RT_USING_PCI +#include "drivers/pci.h" +#ifdef RT_PCI_MSI +#include "drivers/pci_msi.h" +#endif /* RT_PCI_MSI */ +#ifdef RT_PCI_ENDPOINT +#include "drivers/pci_endpoint.h" +#endif /* RT_PCI_ENDPOINT */ +#endif /* RT_USING_PCI */ + #ifdef RT_USING_REGULATOR #include "drivers/regulator.h" #endif /* RT_USING_REGULATOR */ diff --git a/components/drivers/led/led.c b/components/drivers/led/led.c index 8bfd44bfe20..611a16de939 100644 --- a/components/drivers/led/led.c +++ b/components/drivers/led/led.c @@ -15,7 +15,7 @@ #include #include -#include +#include struct blink_timer { diff --git a/components/drivers/mailbox/mailbox.c b/components/drivers/mailbox/mailbox.c index ef3ea4ff528..5e94241f64b 100644 --- a/components/drivers/mailbox/mailbox.c +++ b/components/drivers/mailbox/mailbox.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include static struct rt_spinlock mbox_ops_lock = {}; static rt_list_t mbox_nodes = RT_LIST_OBJECT_INIT(mbox_nodes); diff --git a/components/drivers/nvme/nvme.c b/components/drivers/nvme/nvme.c index 68a47a89c11..dc007147e0b 100644 --- a/components/drivers/nvme/nvme.c +++ b/components/drivers/nvme/nvme.c @@ -578,7 +578,7 @@ static rt_err_t nvme_blk_sync(struct rt_blk_disk *disk) static rt_err_t nvme_blk_erase(struct rt_blk_disk *disk) { - rt_err_t err; + rt_err_t err = RT_EOK; rt_ssize_t slba, lbas, max_lbas; struct rt_nvme_command cmd; struct rt_nvme_device *ndev = rt_disk_to_nvme_device(disk); @@ -955,7 +955,7 @@ static rt_err_t nvme_setup_io_queues(struct rt_nvme_controller *nvme) int irq, cpuid = 0; char name[RT_NAME_MAX]; rt_bool_t affinity_fixup = RT_FALSE; - RT_DECLARE_IRQ_AFFINITY(affinity) = { 0 }; + RT_IRQ_AFFINITY_DECLARE(affinity) = { 0 }; struct rt_nvme_queue *queue; nvme->io_queue_max = nvme->irqs_nr > 1 ? nvme->irqs_nr - 1 : 1; @@ -1052,7 +1052,7 @@ static void nvme_remove_devices(struct rt_nvme_controller *nvme) static rt_err_t nvme_scan_device(struct rt_nvme_controller *nvme, rt_size_t number_of_ns) { - rt_err_t err; + rt_err_t err = RT_EOK; rt_uint32_t lbaf; struct rt_nvme_id_ns *id = RT_NULL; @@ -1272,8 +1272,8 @@ static int nvme_queue_affinify_fixup(void) { int cpuid = rt_hw_cpu_id(); struct rt_nvme_controller *nvme; - RT_DECLARE_IRQ_AFFINITY(affinity) = { 0 }; - RT_DECLARE_IRQ_AFFINITY(current_affinity) = { 0 }; + RT_IRQ_AFFINITY_DECLARE(affinity) = { 0 }; + RT_IRQ_AFFINITY_DECLARE(current_affinity) = { 0 }; RT_IRQ_AFFINITY_SET(affinity, cpuid); diff --git a/components/drivers/pci/host/dw/pcie-dw.h b/components/drivers/pci/host/dw/pcie-dw.h index c0760bf8840..0a1183f2d51 100644 --- a/components/drivers/pci/host/dw/pcie-dw.h +++ b/components/drivers/pci/host/dw/pcie-dw.h @@ -435,6 +435,6 @@ EP_API rt_err_t dw_pcie_ep_inbound_atu(struct dw_pcie_ep *ep, rt_uint8_t func_no EP_API rt_err_t dw_pcie_ep_outbound_atu(struct dw_pcie_ep *ep, rt_uint8_t func_no, rt_ubase_t phys_addr, rt_uint64_t pci_addr, rt_size_t size) EP_RET(-RT_ENOSYS) -EP_API struct dw_pcie_ep_func *dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, rt_uint8_t func_no) EP_RET() +EP_API struct dw_pcie_ep_func *dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, rt_uint8_t func_no) EP_RET(RT_NULL) #endif /* __PCIE_DESIGNWARE_H__ */ diff --git a/components/drivers/pic/Kconfig b/components/drivers/pic/Kconfig index d8d077fb762..3cf00c02956 100755 --- a/components/drivers/pic/Kconfig +++ b/components/drivers/pic/Kconfig @@ -8,6 +8,7 @@ menuconfig RT_USING_PIC config RT_USING_PIC_STATISTICS bool "Enable ISR execution time statistics" depends on RT_USING_PIC + depends on RT_USING_KTIME depends on RT_USING_INTERRUPT_INFO default n diff --git a/components/drivers/pic/pic-gicv2m.c b/components/drivers/pic/pic-gicv2m.c index fb18a67d1e5..ae6013739b5 100755 --- a/components/drivers/pic/pic-gicv2m.c +++ b/components/drivers/pic/pic-gicv2m.c @@ -341,7 +341,7 @@ rt_err_t gicv2m_ofw_probe(struct rt_ofw_node *np, const struct rt_ofw_node_id *i } } - bitmap_size = RT_BITMAP_LEN(v2m->spis_nr) * sizeof(bitmap_t); + bitmap_size = RT_BITMAP_LEN(v2m->spis_nr) * sizeof(rt_bitmap_t); if (!(v2m->vectors = rt_calloc(1, bitmap_size))) { diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index eebe3fd6feb..032c965d528 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -16,7 +16,9 @@ #include #include +#ifdef RT_USING_PIC_STATISTICS #include +#endif struct irq_traps { diff --git a/include/rtthread.h b/include/rtthread.h index 272847bf069..69dcdff8e09 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -794,6 +794,7 @@ rt_device_t rt_console_get_device(void); int __rt_ffs(int value); unsigned long __rt_ffsl(unsigned long value); +unsigned long __rt_clz(unsigned long value); void rt_show_version(void); diff --git a/libcpu/aarch64/common/cpuport.c b/libcpu/aarch64/common/cpuport.c index b2592c854d4..ed619990d77 100644 --- a/libcpu/aarch64/common/cpuport.c +++ b/libcpu/aarch64/common/cpuport.c @@ -56,4 +56,19 @@ unsigned long __rt_ffsl(unsigned long value) #endif } +unsigned long __rt_clz(unsigned long value) +{ +#ifdef __GNUC__ + return __builtin_clz(value); +#else + unsigned long val; + + __asm__ volatile ("clz %0, %1" + :"=r"(val) + :"r"(value)); + + return val; +#endif +} + #endif /* RT_USING_CPU_FFS */