Date: Fri, 24 Nov 2006 14:29:51 GMT From: Oleksandr Tymoshenko <gonzo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 110481 for review Message-ID: <200611241429.kAOETpHc046027@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=110481 Change 110481 by gonzo@gonzo_hq on 2006/11/24 14:28:53 o Elminate limitation on 4-bytes only pci_config write for GT chip. Affected files ... .. //depot/projects/mips2/src/sys/mips/mips4k/malta/gt_pci.c#3 edit Differences ... ==== //depot/projects/mips2/src/sys/mips/mips4k/malta/gt_pci.c#3 (text+ko) ==== @@ -459,11 +459,56 @@ { struct gt_pci_softc *sc = device_get_softc(dev); uint32_t addr; + uint32_t reg_data; + uint32_t shift, mask; + + if(bytes != 4) + { + reg_data = gt_pci_read_config(dev, bus, slot, func, reg, 4); + + /* + * XXX: We assume that words readed from GT chip are BE. + * Should we set the mode explicitly during chip + * Initialization? + */ + switch(reg % 4) + { + case 3: + shift = 24; + break; + case 2: + shift = 16; + break; + case 1: + shift = 8; + break; + default: + shift = 0; + break; + } - /* - * It's possible to write only 4 bytes at the moment - */ - KASSERT(bytes == 4, ("Unsupport write size")); + switch(bytes) + { + case 1: + mask = 0xff; + data = (reg_data & ~ (mask << shift)) | (data << shift); + break; + case 2: + mask = 0xffff; + if(reg % 4 == 0) + data = (reg_data & ~mask) | data; + else + data = (reg_data & ~ (mask << shift)) | + (data << shift); + break; + case 4: + break; + default: + panic("gt_pci_readconfig: wrong bytes count"); + break; + } + } + if (gt_pci_conf_setup(sc, bus, slot, func, reg & ~3, &addr)) return;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611241429.kAOETpHc046027>