works on an alpha es45 as well. theo made me do it.
> On 21 Nov 2014, at 13:49, David Gwynne <da...@gwynne.id.au> wrote:
>
> working on a 2950. will put try it on a r710 soon.
>
> dlg
>
>> On 20 Nov 2014, at 19:10, Mark Kettenis <mark.kette...@xs4all.nl> wrote:
>>
>> Hi All,
>>
>> dlg@ managed to get access to a machine that actually uses 64-bit PCI
>> addresses behind a bridge. This triggered some bugs in the so far
>> untested code. Quelle suprprise!
>>
>> I'd appreciate it if some people can verify that this doesn't break
>> other systems. In particular I'm looking for testers on server-type
>> machines, both i386 and amd64.
>>
>> Thanks,
>>
>> Mark
>>
>>
>> Index: pci.c
>> ===================================================================
>> RCS file: /cvs/src/sys/dev/pci/pci.c,v
>> retrieving revision 1.106
>> diff -u -p -r1.106 pci.c
>> --- pci.c 26 Oct 2014 16:18:42 -0000 1.106
>> +++ pci.c 20 Nov 2014 09:04:51 -0000
>> @@ -936,6 +936,12 @@ pci_reserve_resources(struct pci_attach_
>> blr = pci_conf_read(pc, tag, PPB_REG_PREFMEM);
>> base = (blr & 0x0000fff0) << 16;
>> limit = (blr & 0xfff00000) | 0x000fffff;
>> +#ifdef __LP64__
>> + blr = pci_conf_read(pc, pa->pa_tag, PPB_REG_PREFBASE_HI32);
>> + base |= ((uint64_t)blr) << 32;
>> + blr = pci_conf_read(pc, pa->pa_tag, PPB_REG_PREFLIM_HI32);
>> + limit |= ((uint64_t)blr) << 32;
>> +#endif
>> if (limit > base)
>> size = (limit - base + 1);
>> else
>> Index: ppb.c
>> ===================================================================
>> RCS file: /cvs/src/sys/dev/pci/ppb.c,v
>> retrieving revision 1.59
>> diff -u -p -r1.59 ppb.c
>> --- ppb.c 15 Sep 2014 14:22:07 -0000 1.59
>> +++ ppb.c 20 Nov 2014 09:04:51 -0000
>> @@ -261,7 +261,7 @@ ppbattach(struct device *parent, struct
>> name = malloc(32, M_DEVBUF, M_NOWAIT);
>> if (name) {
>> snprintf(name, 32, "%s pcimem", sc->sc_dev.dv_xname);
>> - sc->sc_memex = extent_create(name, 0, 0xffffffff,
>> + sc->sc_memex = extent_create(name, 0, (u_long)-1L,
>> M_DEVBUF, NULL, 0, EX_NOWAIT | EX_FILLED);
>> extent_free(sc->sc_memex, sc->sc_membase,
>> sc->sc_memlimit - sc->sc_membase + 1,
>> @@ -273,7 +273,7 @@ ppbattach(struct device *parent, struct
>> blr = pci_conf_read(pc, pa->pa_tag, PPB_REG_PREFMEM);
>> sc->sc_pmembase = (blr & 0x0000fff0) << 16;
>> sc->sc_pmemlimit = (blr & 0xfff00000) | 0x000fffff;
>> -#ifdef __LP64__ /* XXX because extents use long... */
>> +#ifdef __LP64__
>> blr = pci_conf_read(pc, pa->pa_tag, PPB_REG_PREFBASE_HI32);
>> sc->sc_pmembase |= ((uint64_t)blr) << 32;
>> blr = pci_conf_read(pc, pa->pa_tag, PPB_REG_PREFLIM_HI32);
>>
>