Portanto, meu problema é que não consigo ler ou gravar em memórias pré-buscáveis que são abertas para mim para pcie. Eu tenho duas configurações diferentes:
1 - Eu tenho um dispositivo complexo de raiz do kernel linux 4.9 e também um dispositivo 4.9 como endpoint. Eu sou capaz de fazer o endereçamento desse dispositivo, então devo ser capaz de ler ou escrever nele. Mas de alguma forma eu estou lendo apenas rabiscos.
2 - Tenho o mesmo dispositivo complexo raiz e um dispositivo baremetal como endpoint. Também sou capaz de endereçar as BARs do dispositivo, mas quando escrevo nele, ele nega as gravações (posso ver a memória em um depurador JTAG) e também quando leio, ele retorna 0xFFFF para uma palavra (a propósito, a memória era diferente de 0xFFFF).
Pesquisei as memórias pré-buscáveis no pci, mas encontrei apenas estas:
- Um comutador pci pode executar operações de gravação em um dispositivo terminal por fusão de bytes (Mesclando bytes em uma palavra). Como estou escrevendo uma palavra, o problema não deve estar relacionado a isso.
- A leitura da memória prefetchable não pode causar efeitos colaterais. (Isso parece não ser um problema inicial.)
Obrigado pelo seu tempo, ficarei feliz em esclarecer minha configuração ou casos, se necessário.
Editar nota:
Eu tenho um pouco mais de progresso que gostaria de passar para vocês: um complexo raiz bare-metal pode acessar a memória de outro complexo raiz, mesmo que seja pré-buscável. Portanto, o suspeito usual parece ser os drivers padrão do kernel.