Vladimir 'φ-coder/phcoder' Serbinenko wrote: >> I will look into yeeloongfw branch, I got Bazaar working yesterday >> evening only... I agree with You, first should be solved known problems >> on simple base. >> Unfortunately, I probably cannot help You as I don't have GEODE or >> Yeeloong... I can hope only that my corrections would help You or >> inspire You in some other ways. >> >> > I don't think it's something deeply specific to Geode. Other than having > Geode MSR instead of PCI configuration space it's normal OHCI. Actually > with your patch when you forgot to power device up it resulted in > similar symptoms on PCI OHCI controller. OHCI specification mentions > different ways to configure power settings. I guess geode defaults to > another mode than most controllers do. Or perhaps I need to somehow > enable ports. > I was right this was the problem with grub_ohci_portstatus. RHUBPORT is of type R/WC and not of type R/W so you just write to it the bits you want to modify and not (previous OR modification). New grub_ohci_portstatus looks like (or patch attached): #define GRUB_OHCI_SET_PORT_ENABLE (1 << 1) #define GRUB_OHCI_CLEAR_PORT_ENABLE (1 << 0) #define GRUB_OHCI_SET_PORT_RESET (1 << 4) #define GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE (1 << 20) static grub_err_t grub_ohci_portstatus (grub_usb_controller_t dev, unsigned int port, unsigned int enable) { struct grub_ohci *o = (struct grub_ohci *) dev->data; grub_dprintf ("ohci", "begin of portstatus=0x%02x\n", grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)); grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, GRUB_OHCI_SET_PORT_RESET); grub_millisleep (50); /* For root hub should be nominaly 50ms */ /* End the reset signaling. */ grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE); grub_millisleep (10); if (enable) grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, GRUB_OHCI_SET_PORT_ENABLE); else grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, GRUB_OHCI_CLEAR_PORT_ENABLE); grub_millisleep (10); grub_dprintf ("ohci", "end of portstatus=0x%02x\n", grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)); return GRUB_ERR_NONE; } -- Regards Vladimir 'φ-coder/phcoder' Serbinenko