Trình điều khiển thiết bị linux hết thời gian chờ giao dịch SPI


11

Tôi bị mắc kẹt trong 3 ngày qua tại một điểm.

Tôi đang làm việc trên trình điều khiển thiết bị eink với chipset Qualcomm msm8960.

Scenario: Trong tệp: kernel / arch / arm / mach-msm / device-8960.c

Tôi không thể xác minh use of spidm_channels" and "spidm_crci"và các mục tương ứng. (Msm8960 pro) (được sao chép từ một số mã tham chiếu) Làm thế nào để xác minh xem các giá trị tương ứng start and endcó đúng không ?? Tôi có datasheet cho msm nhưng không thể tìm thấy bất kỳ tài liệu tham khảo nào.

Tôi đã thêm đoạn mã sau để tạo tài nguyên gsbi mới trong tệp dưới dạng:

static struct resource resources_qup_spi_gsbi9[] = {
    {
            .name   = "spi_base",
            .start  = MSM_GSBI9_QUP_PHYS,
            .end    = MSM_GSBI9_QUP_PHYS + SZ_4K - 1,
            .flags  = IORESOURCE_MEM,
    },
    {
            .name   = "gsbi_base",
            .start  = MSM_GSBI9_PHYS,
            .end    = MSM_GSBI9_PHYS + 4 - 1,
            .flags  = IORESOURCE_MEM,
    },
    {
            .name   = "spi_irq_in",
            .start  = GSBI9_QUP_IRQ,
            .end    = GSBI9_QUP_IRQ,
            .flags  = IORESOURCE_IRQ,
    },
    {
             .name   = "spidm_channels",
            .start  = 3,
            .end    = 4,
            .flags  = IORESOURCE_DMA,
    },
    {
            .name   = "spidm_crci",
            .start  = 12,
            .end    = 13,
            .flags  = IORESOURCE_DMA,
    }, 
};

Lý do cho sự nghi ngờ này là do hoạt động DMA của chúng tôi không thành công với lỗi: từ nhật ký:

<6>[    0.764932] wait_for_ready: I/F Ready.^M
<7>[    0.765176] s1d13522_ spi9.0: setup mode 0, 16 bits/w, 51200000 Hz max --> 0^M
<3>[    1.756630] spi_qsd spi_qsd.9: msm_spi_process_transfer: SPI transaction timeout^M

và sau đó nếu chúng ta cố gắng thực hiện một thao tác DMA khác, nó sẽ báo lỗi sau:

<3>[    6.773355] s1d13522if_cmd: wait_for_ready: I/F busy bit stuck^M
<7>[    6.775400] s1d13522_ spi9.0: setup mode 0, 16 bits/w, 51200000 Hz max --> 0^M
<4>[    6.775583] ------------[ cut here ]------------^M
<4>[    6.775614] WARNING: at /home/anshul_10605816/hip_mirror_2330_code/kernel        /lib/list_debug.c:32 __list_add+0x58/0x78()^M
<4>[    6.775644] list_add corruption. prev->next should be next (c0d5124c), but was 00100100. (prev=edf643b8).^M
<4>[    6.775675] Modules linked in:^M
<4>[    6.775766] [<c00149b8>] (unwind_backtrace+0x0/0x11c) from [<c007c818>] (warn_slowpath_common+0x4c/0x64)^M
<4>[    6.775827] [<c007c818>] (warn_slowpath_common+0x4c/0x64) from [<c007c8b0>] (warn_slowpath_fmt+0x2c/0x3c)^M
<4>[    6.775888] [<c007c8b0>] (warn_slowpath_fmt+0x2c/0x3c) from [<c02a9538>] (__list_add+0x58/0x78)^M
<4>[    6.775919] [<c02a9538>] (__list_add+0x58/0x78) from [<c001e3d4>] (start_ready_cmd+0x84/0x13c)^M
<4>[    6.775980] [<c001e3d4>] (start_ready_cmd+0x84/0x13c) from [<c001e704>] (msm_dmov_enqueue_cmd_ext_work+0x148/0x284)^M
<4>[    6.776041] [<c001e704>] (msm_dmov_enqueue_cmd_ext_work+0x148/0x284) from [<c0094e0c>] (process_one_work+0x27c/0x484)^M
<4>[    6.776072] [<c0094e0c>] (process_one_work+0x27c/0x484) from [<c0095224>] (worker_thread+0x210/0x3b0)^M
<4>[    6.776133] [<c0095224>] (worker_thread+0x210/0x3b0) from [<c00990c0>] (kthread+0x80/0x8c)^M
<4>[    6.776194] [<c00990c0>] (kthread+0x80/0x8c) from [<c000f108>] (kernel_thread_exit+0x0/0x8)^M
<4>[    6.776224] ---[ end trace da227214a82491b8 ]---^M
<3>[   11.766732] spi_qsd spi_qsd.9: msm_spi_process_transfer: SPI transaction timeout^M

Bất cứ sự giúp đỡ nào cũng được đánh giá cao.

Nếu có thêm thông tin mã được yêu cầu xin vui lòng cho tôi biết.

Câu trả lời:


1

Việc thiết lập tài nguyên phụ thuộc vào nền tảng của bạn, không chỉ trình điều khiển.

Một ý tưởng có thể là xác nhận bus SPI của bạn trước khi sử dụng trực tiếp với chipset mục tiêu. Tôi đề nghị sử dụng giao diện spidev và mã không gian người dùng để gửi một cái gì đó trên xe buýt và quan sát kết quả trên máy phân tích logic hoặc máy hiện sóng. Tôi thường làm điều đó để xác nhận các bảng mới.

List_add tham nhũng là đáng ngờ, nhưng khó có thể nói nhiều hơn vào thời điểm đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.