Концепция буфера Scratchpad для сохранения / восстановления состояния контроллера USB-устройства во время гибернации - PullRequest
0 голосов
/ 26 сентября 2018

Я разработал функцию гибернации для контроллера DWC3 Synopsis, в которой я вижу концепцию буфера Scratchpad, которую я не могу понять.

См. Фрагмент кода ниже,

struct dwc3 {
    /* Scratchpad buffers for hibernation support */
    void *hiber_scratchpad[15];
    struct dwc3_scratchpad_array *hiber_scratchpad_array;
    dma_addr_t hiber_scratchpad_array_dma;
}

int dwc3_alloc_scratchpad_buffers(struct dwc3 *dwc)
{
    dma_addr_t  dma_adr;
    int     hiberbufs, i;

    hiberbufs = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(dwc->hwparams.hwparams4);
    if (hiberbufs) {
        /* Allocate scratchpad buffer address array */
        dwc->scratchpad_array = dma_alloc_coherent(NULL,
            sizeof(*dwc->scratchpad_array),
            &dwc->scratchpad_array_dma, GFP_KERNEL);
        if (!dwc->scratchpad_array)
            goto err;
    }

    /* Allocate scratchpad buffers */
    for (i = 0; i < hiberbufs; i++) {
        dwc->scratchpad[i] = dma_alloc_coherent(NULL, 4096, &dma_adr,
                            GFP_KERNEL);
        if (!dwc->scratchpad[i]) {
                ....
            }

            goto err_free;
        }

        dwc->scratchpad_array->dma_adr[i] = cpu_to_le64(dma_adr);
    }
}

Чтобы сохранить состояние контроллера USB-устройства, мы используем dwc->scratchpad_array_dma.

. Почему нам нужно дважды вызывать dma_alloc_coherent()?

Где именно будет храниться состояние контроллера USB-устройства, чтобы я могпроверить из отладчика?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...