в файлике ./linux-2.6.26/drivers/mmc/host/sdhci.c пропатчил Код (Text): --- linux-2.6.26/drivers/mmc/host/sdhci.c 2008-08-24 23:11:17.761068724 +1100 +++ linux-2.6.26/drivers/mmc/host/sdhci.c 2008-08-24 23:11:39.281193763 +1100 @@ -1426,7 +1426,22 @@ "mode even though HW doesn't fully " "claim to support it.\n", mmc_hostname(mmc)); } - + if (host->flags & SDHCI_USE_DMA) { + if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { + using_dac = 1; + consistent_using_dac = 1; + pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); + } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { + using_dac = 0; + consistent_using_dac = 0; + pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); + } else { + printk(KERN_WARNING + "mydev: No suitable DMA available.\n"); + goto unmap; + } + } +/* if (host->flags & SDHCI_USE_DMA) { if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) { printk(KERN_WARNING "%s: No suitable DMA available. " @@ -1434,7 +1449,7 @@ host->flags &= ~SDHCI_USE_DMA; } } - +*/ if (host->flags & SDHCI_USE_DMA) pci_set_master(pdev); else /* XXX: Hack to get MMC layer to avoid highmem */ все собралось, но вот картридер на х86_64 все равно работает в режиме ПИО, почему этот код мог не сработать? что еще забыл сделать?
synoptick а чо в соответствующих конфах нет ни одного подобного вопроса или здесь самые крутые и знающие линуксоиды знающие кардридеры как свои 5 палцев ?
synoptick host->flags точно содержит соответствующий бит? код не имеет никакого отношения к включению DMA он лишь определяет верхнию поддерживаемую границу адресов DMA
Т.е. собираю ли я в ARCH=x86_64? Вот только подозрительно то, что нигде нет значения константы DMA_64BIT_MASK, а ведь все собирается.