On Wed, Nov 5, 2008 at 1:24 PM, Myles Watson <[EMAIL PROTECTED]> wrote:

> > Are you testing these on qemu I assume?
>
> I can.  I don't think I've made any functional changes, but it's probably
> good to check.
>
> Most of this patch isn't exercised by qemu, though.  There are no bridges
> which are not in the dts.
>

It turns out that I forgot the importance of make clean for build testing.
I wish I knew better how to fix the dependencies.

This breaks the build now that I made the change for the pci_ops structs to
be const.

>From pci_ops_auto.c:
const struct pci_bus_operations *pci_check_direct(void)
{
    unsigned int tmp;

    /*
     * Check if configuration type 1 works.
     */
    {
        outb(0x01, 0xCFB);
        tmp = inl(0xCF8);
        outl(0x80000000, 0xCF8);
        if ((inl(0xCF8) == 0x80000000) &&
            pci_sanity_check(&pci_cf8_conf1))
        {
            outl(tmp, 0xCF8);
            printk(BIOS_DEBUG, "PCI: Using configuration type 1\n");
            return &pci_cf8_conf1;
        }
        outl(tmp, 0xCF8);
    }

    die("pci_check_direct failed\n");
    return NULL;
}

/** Set the method to be used for PCI, type I or type II
 */
void pci_set_method(struct device * dev)
{
    printk(BIOS_INFO, "Finding PCI configuration type.\n");
    dev->ops->ops_pci_bus = pci_check_direct();
    post_code(POST_STAGE2_PHASE2_PCI_SET_METHOD);
}

Here are the interesting things:
1. pci_check_direct either returns pci_cfg8_conf1 or dies
2. This code is only used by geodelx

I think the const struct is the right way to do this.  Can we change these
functions?

Two solutions:
1. Set the entire ops
2. Initialize it correctly and die if the check fails

Comments?

Thanks,
Myles
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to