Я работал над linux iTCO-wdt. c драйвером (linux ядро 4.14.44 hw watchdog драйвер) и в итоге пришел к вызову devm_ioremap_resource () :
p->gcs_pmc = devm_ioremap_resource(dev, p->gcs_pmc_res);
Ресурс является регистром в физическом расположении 0xfdcf000 c. Я понял все предыдущее назначение ресурсов, сделанное в i2 c -i801. c, но не знаю, зачем нужно такое переназначение. Действительно, ищите код в Coreboot, который управляет той же подсистемой (в src / soc / intel / denverton_ns / include / soc / romstage. c)
MMIO32_OR(PCH_PCR_ADDRESS(PID_SMB, PCR_SMBUS_GC),(uint32_t)PCR_SMBUS_GC_NR);
макросы расширяются до тот же физический адрес, что и выше, и переназначение не выполняется, и он работает просто отлично. Если я распечатаю адрес, полученный в результате переназначения выше, я получу другой адрес, который иногда меняется от запуска к запуску (т. Е. 0x0x00d2900 c, 0x80d2900 c, 0xc0d2900 c). Почему такое переназначение, какова его цель?