首页 > 其他分享 >reset子系统简介

reset子系统简介

时间:2024-03-23 23:34:58浏览次数:20  
标签:reset control struct 复位 简介 dev id 子系统

复位模式

在硬件设备被置于复位模式时,通常会限制或禁止对设备寄存器的读写操作。这是为了确保在复位模式下设备能够以可控和可预测的方式进行初始化和复位操作。具体而言,当设备被置于复位模式时,其内部状态和寄存器值可能会被清零或设置为初始状态。此时,外部对设备的读写操作可能会受到限制或无效。  

linux reset驱动框架

reset core操作函数

在drivers/reset/core.c中
struct reset_control_ops {
    int (*deassert)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*assert)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*reset)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*status)(struct reset_controller_dev *rcdev, unsigned long id);
    int (*reset_check)(struct reset_controller_dev *rcdev, unsigned long id);
};

deassert() 函数指针用于解除复位控制器的复位信号。
assert() 函数指针用于触发复位控制器的复位信号。
reset() 函数指针用于执行硬件复位操作。reset()函数内部逻辑就是先assert()再deassert()
status() 函数指针用于查询复位控制器的状态。
reset_check() 函数指针用于检查复位控制器是否处于复位状态。
 

相关API函数

// 解析设备树,获取reset_control结构体指针
static inline struct reset_control *devm_reset_control_get_optional_shared(
                    struct device *dev, const char *id)    // 共享的复位
{
        return __devm_reset_control_get(dev, id, 0, true, true, false);
}

static inline struct reset_control *devm_reset_control_get_optional_exclusive(
                    struct device *dev, const char *id)    // 私有的复位
{
        return __devm_reset_control_get(dev, id, 0, false, true, true);
}
实际在芯片设计的时候,各个模块的复位寄存器肯定都是一对一的,使用私有的复位函数获取即可
static int my_driver_probe(struct platform_device *pdev)
{
    struct reset_control *rstc;

    rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
    if (IS_ERR(rstc)) {
        dev_err(&pdev->dev, "Failed to get reset control\n");
        return PTR_ERR(rstc);
    }

    /* 在此处可以使用获取到的复位控制器进行操作 */

    return 0;
}

// 第二个参数是可选的复位控制器名称,如果设置为 NULL,则函数会根据设备的 struct device 结构体中的 of_node 或 fwnode 字段来查找复位控制器。
 
reset_control_deassert(rst);
reset_control_assert(rst);
reset_control_reset(rst);
这三个函数对应的就是reset core中操作函数   一般在probe函数中,使用reset_control_deassert函数来解除复位状态,让device可以正常工作 在remove函数中,使用reset_control_assert函数将设备置于复位状态 在restart函数中,使用reset_control_reset函数将设备复位  

操作节点

在Linux的reset子系统中,以下是一些常用的节点文件:
/sys/class/reset/reset-xxx/state:表示一个复位控制器的状态,可以是asserted(激活)或deasserted(非激活)。
/sys/class/reset/reset-xxx/reset:表示一个复位控制器的重置操作。写入1会触发复位操作,写入0则会取消复位操作。
/sys/class/reset/reset-xxx/status:表示一个复位控制器的详细信息,如可用的复位信号数量、重置类型等。
/sys/bus/platform/devices/xxx/reset:表示与平台设备相关联的复位控制器。通过该节点文件可以实现对特定平台设备的复位控制。
以上节点文件名称中的和都是占位符,需要替换为具体的设备名称或标识符

标签:reset,control,struct,复位,简介,dev,id,子系统
From: https://www.cnblogs.com/lethe1203/p/18091901

相关文章

  • gpio子系统分析
    参考博客:https://blog.csdn.net/yangguoyu8023/article/details/121892008https://blog.csdn.net/yangguoyu8023/category_11576708.html gpiolib相关数据结构:数据结构主要定义在include/linux/gpio/driver.h和/drivers/gpio/gpiolib.h中/***structgpio_chip-a......
  • gpio子系统与pinctrl子系统通用API
    此篇不涉及gpio子系统和pinctrl原理解释,只列举相关操作函数: 通用的GPIO操作:1.gpio_request(unsignedgpio,constchar*label):向内核申请指定gpio,所申请的IO口会被内核记录参数:gpio:申请IO口编号,label:申请者的名字,随便。返回:int值,成功:0;失败:负数注:在使用gpio口之前,应先用g......
  • 设备树DTS简介及DTS基本语法
    参考资料:https://www.bilibili.com/video/BV1fJ411i7PB?p=16&vd_source=432ba293ecfc949a4174ab91ccc526d6 在linux3.1版本引入设备树设备树用来描述板级信息编译设备树:makeall//全编译,包括内核镜像和dtbmakedtbs//编译所有的设备树文件makeimx6ull-14x1......
  • VUE3.0(一):vue3.0简介
    Vue3入门指南什么是vueVue(发音为/vjuː/,类似view)是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue都可以胜任。vue3官方文......
  • JAVA阻塞IO(BIO)简介
    一、BIO编程传统的BIO编程网络编程的基本模型是C/S模型,即两个进程间的通信。服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启......
  • 根文件系统简介与BusyBox构建根文件系统
    参考资料:https://www.bilibili.com/video/BV12E411h71h?p=43&vd_source=432ba293ecfc949a4174ab91ccc526d6 根文件系统简介:根文件系统也成为rootfs,fatfs这类的文件系统属于Linux内核的一部分,属于软件代码如果没根文件系统,内核会出现kernelpanic。根文件系统就是一堆文件,比......
  • 海思 SS927V100 HI3519AV200 简介
    海思SS927V100HI3519AV200简介HI3519AV200是一颗专业ultra-HDSmartIPCameraSOC。SS927V100(另称:22AP70、SD3402)功能以及封装与HI3519AV200完全一致,可以平替HI3519AV200。最高支持四路sensor输入,支持最高4K60的ISP图像处理能力,支持3FWDR、多级降噪、六轴......
  • 宽动态(WDR)简介
    WDR,全称WideDynamicRange,即宽动态范围。宽动态就是场景中特别亮的部位和特别暗的部位同时都能看得特别清楚。宽动态范围是图像能分辨最亮的亮度信号值与能分辨的最暗的亮光信号值的比值。 宽动态图像对比宽动态未开启:只能看清窗外的建筑物,房间内的人无法看清宽动态开启:无......
  • 【教程】高效数据加密混淆方法及实现简介
     背景在需要对数据进行传输或者表达时,通常要求数据加密的安全级别不高,但希望加解密时间复杂度尽可能低。这时使用传统的对称加密(如3DES、AES)或非对称加密(如RSA、ECC)显然不太适合。因为加密的安全级别和加解密时间复杂度之间存在矛盾。所以,我们需要寻找一种方法,在保证安全性的同......
  • Linux内核启动流程简介
    参考资料:https://www.bilibili.com/video/BV12E411h71h?p=38&vd_source=432ba293ecfc949a4174ab91ccc526d6 Linux内核链接脚本arch/arm/kernel/vmlinux.lds arch/arm/kernel/vmlinux.lds中OUTPUT_ARCH(arm)ENTRY(stext)//Linux内核入口,入口函数stextjiffies=......