__raw_readl () всегда возвращает 0x00 для регистров PXP Freescale i.MX 6 - PullRequest
2 голосов
/ 11 июля 2019

Я работаю с процессором Freescale i.MX6DualLite на специальной плате.Камера imx HAL поддерживает модуль Pixel Pipeline SoC для преобразования пиксельных форматов USB-камер.Поэтому я перенес следующий драйвер ядра в свое ядро:

https://github.com/boundarydevices/linux-imx6.git

Ветвь: border-imx-o8.0.0_1.0.0-ga

К сожалению, доступPXP не работает.Ioctl () вызывает PXP_IOC_CONFIG_CHAN, PXP_IOC_START_CHAN и PXP_IOC_WAIT4CMPLT, потому что прерывание PXP не инициируется.Поэтому я добавил несколько операторов printk () для проверки регистров PXP:

[67221.574349] pxp: HW_PXP_CTRL 0x0
[67221.574352] pxp: HW_PXP_STAT 0x0
[67221.574355] pxp: HW_PXP_OUT_CTRL 0x0
[67221.574357] pxp: HW_PXP_OUT_BUF 0x0
[67221.574360] pxp: HW_PXP_AS_CTRL 0x0
[67221.574363] pxp: HW_PXP_AS_BUF 0x0
[67221.574365] pxp: HW_PXP_PS_CTRL 0x0
[67221.574368] pxp: HW_PXP_PS_BUF 0x0

Каждый соответствующий регистр равен 0x00.Я трижды проверил механизм синхронизации и регистры CCM: PXP имеет тактовый сигнал.Поэтому я предполагаю, что это не проблема.Я также проверил адрес регистрации PXP, указанный в DTS.Это правильно и успешно переназначено в мою память ядра.Я также играл с ioremap_no_cache (), но это не помогло.

Так что мой вопрос: кто-нибудь сталкивался с такой же проблемой с любым модулем Freescale i.MX6?Я пропускаю какой-нибудь сигнал включения?

...