__raw_writel, writel_relaxed 和 writel的区别

因为对别的平台不了解,下面仅谈它们在ARM上的区别


__raw_writel: 因为有volatile关键字, 所以编译器不会打乱多个__raw_writel的执行顺序。

对于ARM而言,当多个写以代码的顺序到达相同设备时,执行的顺序也是被保证的,不过

对于不同的设备,执行的顺序就不被保证了。


write_relaxed: 在ARM平台上与__raw_writel一样,因为与__raw_writel相比,它只多做

了一个大端到小端转换。


writel: 当CONFIG_ARM_DMA_MEM_BUFFERABLE被定义时,在写之前,它会多做

一个DSB和L2的sync。 为什么需要这样呢? 因为,DMA buffer都是 bufferable了,

(详见加入CONFIG_ARM_DMA_MEM_BUFFERABLE的commit log)

在DMA进行之前要保证write buffer里的数据都到memory里。

所以说: 只有在有DMA操作的代码里,writel才是必须的,其实它是一个

当DMA buffer变成bufferable之后的一个补充品。因为要保证DMA buffer里的

内容在DMA开始之前都到memory里,所以开始DMA的指令(writel)里加了

sync memory的指令。


其实: writel也不能保证写的东西一定完成,它只能保证写的指令或写的内容

已经到了设备端,但具体有没有写完成是不知道的。如果有一定要设备端

写完成才能做下面的指令的要求,最好再用readl把它读回来。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
眼图测试方法dwc3_writel是用于测试和诊断数字通信系统中的传输链路质量的一种方法。该方法通过发送特定的测试模式数据,并在接收端对接收到的数据进行分析,以评估链路的传输性能和信号的完整性。 具体来说,眼图测试方法首先通过发送一个特定的测试模式数据序列,该序列包含了不同的数据传输模式,例如0、1、和一些预定义的数据序列。然后,接收端将接收到的数据进行采样,并绘制出眼图。 眼图是一种以时间为横轴,以电压为纵轴的图形,用于表示数据在传输过程中的变化情况。眼图通常由多个眼睛形状的开口组成,每个开口代表一个周期的传输。通过观察眼图的开放度和对称性,可以评估链路中的传输质量和信号的完整性。开放度表示了数据的可分辨度,开口越大表示传输质量越好。对称性表示了数据在不同时刻的传输一致性,对称性越好表示传输效果越稳定。 在进行眼图测试时,通常还需要根据测试需求调整测试参数,例如采样速率、校正等。通过对测试结果进行分析,可以判断链路是否存在传输错误、时钟偏移、噪音等问题,从而优化和改善链路的传输性能。 总的来说,眼图测试方法dwc3_writel是一种常用的测试手段,用于评估数字通信系统中传输链路的质量和信号的完整性,通过分析眼图可以诊断和优化链路的传输性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值