Re: Adding flag to disable native mode on aceride
Chris Gilbert <[email protected]> Thu, 30 Aug 2007 22:18:39 +0100
| Newsgroups | gmane.os.netbsd.ports.cats,gmane.os.netbsd.devel.kernel |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------070608000706030709040707 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Manuel Bouyer wrote: > On Thu, Aug 30, 2007 at 11:18:22PM +0900, Izumi Tsutsui wrote: >> [email protected] wrote: >>> Does this look ok? I'd like to check in the chage in then next couple >>> of days. >> If the flag is cats specific, it's better to use proplib(3) >> to specify such quirks rather than config flags, >> as iyonix/autoconf.c, sgimips/autoconf.c etc. do >> for their onboard PCI devices. > > Yes, this looks better to me as well > Ok, attached is the diff using proplib instead of flags. Does this look ok? Thanks, Chris --------------070608000706030709040707 Content-Type: text/plain; name="aceride_compat.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="aceride_compat.diff" Index: arch/cats/cats/autoconf.c =================================================================== RCS file: /cvsroot/src/sys/arch/cats/cats/autoconf.c,v retrieving revision 1.11.6.1 diff -u -p -r1.11.6.1 autoconf.c --- arch/cats/cats/autoconf.c 11 Aug 2007 21:14:52 -0000 1.11.6.1 +++ arch/cats/cats/autoconf.c 30 Aug 2007 21:08:56 -0000 @@ -152,5 +150,18 @@ cpu_configure(void) void device_register(struct device *dev, void *aux) { + if (device_is_a(dev, "aceride")) + { + prop_bool_t force_compat_mode; + + force_compat_mode = prop_bool_create(true); + + if (prop_dictionary_set(device_properties(dev), + "force-compat-mode", + force_compat_mode) == false) + printf("WARNING: unable to set force-compat-mode " + "property for %s\n", dev->dv_xname); + prop_object_release(force_compat_mode); + } } /* End of autoconf.c */ Index: dev/pci/aceride.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/aceride.c,v retrieving revision 1.23 diff -u -p -r1.23 aceride.c --- dev/pci/aceride.c 9 Feb 2007 21:55:27 -0000 1.23 +++ dev/pci/aceride.c 30 Aug 2007 21:08:56 -0000 @@ -167,7 +167,30 @@ acer_chip_map(struct pciide_softc *sc, s ~ACER_CHANSTATUSREGS_RO); cr = pci_conf_read(sc->sc_pc, sc->sc_tag, PCI_CLASS_REG); cr |= (PCIIDE_CHANSTATUS_EN << PCI_INTERFACE_SHIFT); + + { + /* + * some BIOSes (port-cats ABLE) enable native mode, but don't + * setup everything correctly, so allow the forcing of + * compat mode + */ + prop_bool_t pn; + pn = prop_dictionary_get( + device_properties(&sc->sc_wdcdev.sc_atac.atac_dev), + "force-compat-mode"); + if (pn != NULL) { + KASSERT(prop_object_type(pn) == PROP_TYPE_BOOL); + if (prop_bool_true(pn)) + { + cr &= ~((PCIIDE_INTERFACE_PCI(0) + | PCIIDE_INTERFACE_PCI(1)) + << PCI_INTERFACE_SHIFT); + } + } + } + pci_conf_write(sc->sc_pc, sc->sc_tag, PCI_CLASS_REG, cr); + /* Don't use cr, re-read the real register content instead */ interface = PCI_INTERFACE(pci_conf_read(sc->sc_pc, sc->sc_tag, PCI_CLASS_REG)); --------------070608000706030709040707--