ranges属性验证
在设备树节点里增加这3个属性
#address-cells = <3>; #size-cells = <2>;//含义解释和上面的属性值有关ranges = <0x42000000 0 0xf9c00000 0x0 0xf9d00000 0 0x00300000>;
在代码里增加这么一段代码:
struct of_pci_range range;struct of_pci_range_parser parser;const char *range_type;of_pci_range_parser_init(&parser, pdev->dev.of_node);for_each_of_pci_range(&parser, &range) { if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_IO)range_type = "IO";else if ((range.flags & IORESOURCE_TYPE_BITS) == IORESOURCE_MEM)range_type = "MEM";elserange_type = "err";printk("0x%x %6s %#012llx..%#012llx -> %#012llx\n", \range.flags, range_type, range.cpu_addr, \range.cpu_addr + range.size - 1, range.pci_addr);}
以下是打印:
0x42000000 err 0x00f9d00000..0x00f9ffffff -> 0x00f9c00000