On 06/07/2011 12:30 PM, Arend van Spriel wrote: > On 06/07/2011 02:33 AM, RafaÅ MiÅecki wrote: >> W dniu 7 czerwca 2011 00:00 uÅytkownik Hauke Mehrtens >> <hauke@xxxxxxxxxx> napisaÅ: >>> On 06/06/2011 12:22 PM, RafaÅ MiÅecki wrote: >>>>> + if (bus->hosttype == BCMA_HOSTTYPE_EMBEDDED) { >>>>> + iounmap(bus->mmio); >>>>> + mmio = ioremap(BCMA_ADDR_BASE, BCMA_CORE_SIZE * >>>>> bus->nr_cores); >>>>> + if (!mmio) >>>>> + return -ENOMEM; >>>>> + bus->mmio = mmio; >>>>> + >>>>> + mmio = ioremap(BCMA_WRAP_BASE, BCMA_CORE_SIZE * >>>>> bus->nr_cores); >>>>> + if (!mmio) >>>>> + return -ENOMEM; >>>>> + bus->host_embedded = mmio; >>>> Do we really need both? mmio and host_embedded? What about keeping >>>> mmio only and using it in calculation for read/write[8,16,32]? >>> These are two different memory regions, it should be possible to >>> calculate the other address, but I do not like that. As host_embedded is >>> in a union this does not waste any memory. >> Ah, OK, I can see what does happen here. You are using: >> 1) bus->mmio for first core >> 2) bus->host_embedded for first agent/wrapper >> >> I'm not sure if this is a correct approach. Doing "core_index * >> BCMA_CORE_SIZE" comes from ssb, where it was the way to calculate >> offset. In case of BCMA we are reading all the info from (E)EPROM, >> which also includes addresses of the cores. >> >> IMO you should use core->addr and core->wrap for read/write ops. I >> believe this is approach Broadcom decided to use for BCMA, when >> designing (E)EPROM. > > Agree. There is no guarantee for the core index to relate to the > physical address. Chip designer may be systematic in this and the > index*size method may work, but not by design. > > Gr. AvS > Ok I will use these addresses. Hauke -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html