高通平台spi调试权限问题

描述:客户调试SPI副屏时调用spi_write系统直接卡死

 刚开始看是权限问题,在tz中修改将NsOwner从bp修改到了ap,但出现dump,如上log

tz中spi工作在GSI模式下,搜索发现SPI GSI_MODE下不能使用局部buffer来进行传输,于是在tz中将bAllowFifo标志改成TRUE,问题就解决了,另外也可以在代码中将传输buffer定义为全局buffer。

diff --git a/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/nicobar/QUPAC_Access.c b/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/nicobar/QUPAC_Access.c
index 484b66287..079418bba 100755
--- a/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/nicobar/QUPAC_Access.c
+++ b/trustzone_images/core/settings/buses/qup_accesscontrol/qupv3/config/nicobar/QUPAC_Access.c
@@ -31,7 +31,7 @@
 const QUPv3_se_security_permissions_type qupv3_perms_default[] =
 {
   /*PeriphID,    ProtocolID,             Mode,            NsOwner,   bAllowFifo, bLoad, bModExcl  */
-  { QUPV3_0_SE0, QUPV3_PROTOCOL_SPI,     QUPV3_MODE_GSI,  AC_TZ,          FALSE, TRUE,  TRUE  }, // NFC eSE
+  { QUPV3_0_SE0, QUPV3_PROTOCOL_SPI,     QUPV3_MODE_GSI,  AC_HLOS,         TRUE, TRUE,  TRUE  }, // NFC eSE
   { QUPV3_0_SE1, QUPV3_PROTOCOL_I2C,     QUPV3_MODE_FIFO, AC_HLOS,         TRUE, TRUE,  FALSE }, // SMB/EEPROM/PM8008/Ext PD control
   { QUPV3_0_SE2, QUPV3_PROTOCOL_I2C,     QUPV3_MODE_FIFO, AC_HLOS,         TRUE, TRUE,  FALSE }, // Touch
   /*QUPV3_0_SE3*/

参考链接:高通平台调试中遇到的SPI问题_就叫者行孙吧的博客-CSDN博客_qupv3_mode_gsi

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是高通平台 SPI 测试示例代码,供参考: ```c #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/spi/spi.h> #include <linux/delay.h> #include <linux/slab.h> #define SPI_DEVICE_NAME "spi_test_device" #define SPI_DEVICE_MINOR 0 static struct spi_device *spi_dev; static int spi_test_open(struct inode *inode, struct file *file) { printk(KERN_INFO "SPI Test Device Opened\n"); return 0; } static int spi_test_close(struct inode *inode, struct file *file) { printk(KERN_INFO "SPI Test Device Closed\n"); return 0; } static ssize_t spi_test_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { printk(KERN_INFO "SPI Test Device Read\n"); return 0; } static ssize_t spi_test_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { printk(KERN_INFO "SPI Test Device Write\n"); return count; } static const struct file_operations spi_test_fops = { .owner = THIS_MODULE, .open = spi_test_open, .release = spi_test_close, .read = spi_test_read, .write = spi_test_write, }; static int spi_test_probe(struct spi_device *dev) { int ret; printk(KERN_INFO "SPI Test Device Probed\n"); spi_dev = dev; ret = alloc_chrdev_region(&dev_num, SPI_DEVICE_MINOR, 1, SPI_DEVICE_NAME); if (ret) { printk(KERN_ERR "Failed to register SPI Test Device: %d\n", ret); return ret; } cdev_init(&c_dev, &spi_test_fops); c_dev.owner = THIS_MODULE; c_dev.ops = &spi_test_fops; ret = cdev_add(&c_dev, dev_num, 1); if (ret) { printk(KERN_ERR "Failed to add SPI Test Device: %d\n", ret); unregister_chrdev_region(dev_num, 1); return ret; } return 0; } static int spi_test_remove(struct spi_device *dev) { printk(KERN_INFO "SPI Test Device Removed\n"); cdev_del(&c_dev); unregister_chrdev_region(dev_num, 1); return 0; } static struct spi_driver spi_test_driver = { .driver = { .name = "spi_test", .owner = THIS_MODULE, }, .probe = spi_test_probe, .remove = spi_test_remove, }; static int __init spi_test_init(void) { int ret; printk(KERN_INFO "Initializing SPI Test Device\n"); ret = spi_register_driver(&spi_test_driver); if (ret) { printk(KERN_ERR "Failed to register SPI Test Driver: %d\n", ret); return ret; } return 0; } static void __exit spi_test_exit(void) { printk(KERN_INFO "Exiting SPI Test Device\n"); spi_unregister_driver(&spi_test_driver); } module_init(spi_test_init); module_exit(spi_test_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("SPI Test Device Driver"); ``` 这是一个简单的 SPI 设备驱动程序,它创建一个名为 `spi_test_device` 的字符设备,并在 probe 函数中将其与 SPI 设备进行关联。在此之后,您可以使用标准的字符设备读写函数来与 SPI 设备进行通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值