On 11/18/2009 08:34 AM, Oncaphillis wrote: > The first ioread16 actually succeeds, only the second one fails. > My lspci -vnn tells me that the memory is: > > Memory at 57100000 (64-bit, non-prefetchable) [size=16K] > > Could it be that one has to make a ioread32 here since the > memory is 64-bit ? I remember very very remotely that > in older days it was impossible or even forbidden to read > data from addresses which are not a multiple of 2/4/8 what > so ever. But that was pre-PCI.
As long as a 16-bit read is aligned on an even address, it should be OK; however, to check completely, please try this patch: Index: wireless-testing/drivers/ssb/pci.c =================================================================== --- wireless-testing.orig/drivers/ssb/pci.c +++ wireless-testing/drivers/ssb/pci.c @@ -251,10 +251,16 @@ static int sprom_check_crc(const u16 *sp static int sprom_do_read(struct ssb_bus *bus, u16 *sprom) { int i; + u32 buf; - for (i = 0; i < bus->sprom_size; i++) - sprom[i] = ioread16(bus->mmio + SSB_SPROM_BASE + (i * 2)); - + printk(KERN_INFO "ssb: Entering %s\n", __func__); + for (i = 0; i < bus->sprom_size; i = i + 2) { + buf = ioread32(bus->mmio + SSB_SPROM_BASE + (i * 2)); + printk(KERN_INFO "ssb: Read 0x%.8X from SPROM\n", buf); + sprom[i] = buf & 0x0000FFFF; + sprom[i+1] = (buf >> 16) & 0x0000FFFF; + } + printk(KERN_INFO "ssb: Leaving %s\n", __func__); return 0; } Larry _______________________________________________ Bcm43xx-dev mailing list Bcm43xx-dev@lists.berlios.de https://lists.berlios.de/mailman/listinfo/bcm43xx-dev