首页 > 系统相关 >Linux hwspinlock子系统(STM32MP157 HSEM)

Linux hwspinlock子系统(STM32MP157 HSEM)

时间:2024-07-13 22:30:16浏览次数:10  
标签:HSEM int STM32MP157 hwspin hwspinlock lock device struct

hwspinlock(硬件自旋锁)是 Linux 内核中的一个同步机制,它提供了一种在多核处理器系统中保护共享资源的方法。

hwspinlock分为三部分:

  • hwspinlock core提供注册注销以及对hwspinlock获取和释放接口。
  • hwspinlock Controller驱动。
  • hwspinlock Client驱动,使用hwspinlock提供的同步机制,维护和其他核共享资源。

1 hwspinlock配置和文件

hwspinlock配置:

Device Drivers
  Hardware Spinlock drivers
    STM32 Hardware Spinlock device

 相关文件如下:

drivers/hwspinlock/
├── hwspinlock_core.c--hwspinlock的注册注销接口,以及使用lock/unlock API。 ├── stm32_hwspinlock.c--STM32 hwspinlock驱动。

2 hwspinlock硬件:HSEM

3 hwspinlock API

hwspinlock注册和注销接口:

int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
        const struct hwspinlock_ops *ops, int base_id, int num_locks);
int hwspin_lock_unregister(struct hwspinlock_device *bank);
int devm_hwspin_lock_unregister(struct device *dev,
                struct hwspinlock_device *bank);
int devm_hwspin_lock_register(struct device *dev,
                  struct hwspinlock_device *bank,
                  const struct hwspinlock_ops *ops,
                  int base_id, int num_locks);

 从hwspinlock core获取一个hwspinlock client:

struct hwspinlock *hwspin_lock_request(void);
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
struct hwspinlock *devm_hwspin_lock_request(struct device *dev);
struct hwspinlock *devm_hwspin_lock_request_specific(struct device *dev,
                             unsigned int id);

获取或者释放hwspinlock:

int __hwspin_lock_timeout(struct hwspinlock *, unsigned int, int,
                            unsigned long *);
int __hwspin_trylock(struct hwspinlock *, int, unsigned long *);
void __hwspin_unlock(struct hwspinlock *, int, unsigned long *);

4 STM32MP157 HSEM驱动

4.1 hwspinlock Controller驱动

hwspinlock dts:

        hsem: hwspinlock@4c000000 {
            compatible = "st,stm32-hwspinlock";
            #hwlock-cells = <2>;
            reg = <0x4c000000 0x400>;
            clocks = <&rcc HSEM>;
            clock-names = "hsem";
        };

 hwspinlock驱动程序:

stm32_hwspinlock_init
  stm32_hwspinlock_driver
    stm32_hwspinlock_probe
      hwspin_lock_register
        hwspin_lock_register_single

4.2 hwspinlock Client驱动

devm_hwspin_lock_request_specific:从hwspinlock core中获取一个特定hwspinlock实例。

hwspin_lock_timeout_irqsave:尝试获取hwspinlock锁。

hwspin_unlock_irqrestore:释放hwspinlock锁。

标签:HSEM,int,STM32MP157,hwspin,hwspinlock,lock,device,struct
From: https://www.cnblogs.com/arnoldlu/p/18296987

相关文章

  • Linux remoteproc子系统(基于STM32MP157)概览
    remoteproc(RemoteProcessorFramework)用于管理异构远程处理器设备。这些设备通常在非对称多处理(AsymmetricMultiProcessing,AMP)配置中,可能运行不同的操作系统实例,包括Linux或其他实时操作系统的变体。remoteproc框架允许不同平台或架构控制远程处理器(例如,开启电源、加载固件......
  • 嵌入式Linux中的LED驱动控制(以野火STM32MP157开发板为例)
    在嵌入式Linux系统中,由于从硬件到软件都是自己定制的,所以很多时候需要对自己定义的设备编写驱动程序。本例就以野火STM32MP157开发板为例,讨论如何控制开发板上三个LED的亮灭。先来看一下LED部分的电路原理图,如下所示。从上图中可以看到,三个RGB颜色的二极管采用共阳接法,因此在......
  • STM32MP157D-DK1 Qt程序交叉编译与运行测试
    上篇文章介绍了STM32MP157D-DK1开发板Qt镜像的构建,通过在Ubuntu中重新编译带有Qt功能的系统来实现。本篇在上篇的基础上,继续搭建Qt的交叉编译环境,实现Qt程序在Ubuntu中编译,在STM32MP157板子中运行。1编译安装SDK在上篇编译系统镜像的基础上,继续编译和安装SDK。1.1编译SDK执行如下......
  • STM32MP157D-DK1开发板Qt镜像构建
    上篇介绍了STM32MP57-DK1开发板官方系统的烧录。那个系统包含Linux系统的基础功能,如果要进行Qt开发,还需要重新构建带有Qt功能的镜像本篇就来介绍如何构建带有Qt功能的系统镜像,并在开发板中烧录构建的镜像。1Distribution包的构建STM32微处理器平台的STM32MPU嵌入式软件发行版支持......
  • STM32MP157驱动开发——USB设备驱动
    一、简介  由于USB协议太过庞大和复杂,所以本节只对STM32MP157自带的USB驱动进行使能和测试。详细的USB接口和协议的介绍,可以参考原子哥的资料《USB2.0协议中文版.pdf》和《USB3.0协议中文版.pdf》。  USB全称为UniversalSerialBus,翻译过来就是通用串行总线,用......
  • 基于mdev实现adb热插拔(@STM32MP157D+fusb302)
    关键词:fusb302、uevent、mdev、adbd等等。1fusb302关于USB插拔检测,以及增加uevent事件fsusb302支持USBPowerDelivery协议(USBPowerDelivery),支持识别各种USB设备和对应的状态。fusb302支持DRP(DualRolePower)、DFP(DownstreamFacingPort)、UFP(UpstreamFacingPort)......
  • 嵌入式Linux adbd实现概要梳理(基于STM32MP157D+Buildroot)
    关键词:USBGadget、dwc2、configfs、functionfs、adbd等等。基于STM32MP157D简单记录ADB实现的过程,涉及到USB、Gadget、configfs、functionfs、adbd、ADB协议等等。基于Buildroot2020.02.6编译adbd运行于设备,和PCWindows交互的简要框图:1Linux下USBGadget1.1Linux内核Gad......
  • iTOP-STM32MP157开发板一键烧写 QT 程序到开发板
    1根据上一小节设置好编译套件后,打开自己的qt工程,然后点击qtcreator里面的项目,把编译器切换成上一章节设置好的的编译器,如下图所示:2然后打开要编译的QT代码的pro文件,在里面添加以下代码,这俩行代码的意思是说把编译的可执行程序下载到开发板的/opt目录下并执行。target.pa......
  • STM32 Linux开发板丨STM32MP157开发板资料手册+实战教程+视频教程
    iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持,借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。开发板既有A7核,又有M4核,从学习者角度来看,既......
  • 基于stm32mp157 linux开发板ARM裸机开发教程3:Cortex-A7 架构与工作模式(连载中)
    前言:目前针对ARMCortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板)针对......