Changeset 3421

Show
Ignore:
Timestamp:
07/12/08 02:03:26 (3 months ago)
Author:
mjones
Message:

There was a programming error which made most USB port4 setup wrong. This patch uses byte pointer and the MMIO read and write functions.

Signed-off-by: Marc Jones <marc.jones@…>

Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@…>

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/coreboot-v2/src/southbridge/amd/cs5536/cs5536.c

    r3053 r3421  
    410410static void enable_USB_port4(struct southbridge_amd_cs5536_config *sb) 
    411411{ 
    412         uint32_t *bar; 
     412        uint8_t *bar; 
    413413        msr_t msr; 
    414414        device_t dev; 
     
    426426                wrmsr(USB2_SB_GLD_MSR_DIAG, rdmsr(USB2_SB_GLD_MSR_DIAG)); 
    427427 
    428                 bar = (uint32_t *) pci_read_config32(dev, PCI_BASE_ADDRESS_0); 
     428                bar = (uint8_t *) pci_read_config32(dev, PCI_BASE_ADDRESS_0); 
    429429 
    430430                /* Make HCCPARAMS writeable */ 
    431                 *(bar + IPREG04) |= USB_HCCPW_SET; 
     431                writel(readl(bar + IPREG04) | USB_HCCPW_SET, bar + IPREG04); 
    432432 
    433433                /* ; EECP=50h, IST=01h, ASPC=1 */ 
    434                 *(bar + HCCPARAMS) = 0x00005012; 
     434                writel(0x00005012, bar + HCCPARAMS); 
    435435        } 
    436436 
     
    438438                        PCI_DEVICE_ID_AMD_CS5536_OTG, 0); 
    439439        if (dev) { 
    440                 bar = (uint32_t *) pci_read_config32(dev, PCI_BASE_ADDRESS_0); 
    441  
    442                 *(bar + UOCMUX) &= PUEN_SET; 
     440                bar = (uint8_t *) pci_read_config32(dev, PCI_BASE_ADDRESS_0); 
     441 
     442                writel(readl(bar + UOCMUX) & PUEN_SET, bar + UOCMUX); 
    443443 
    444444                /* Host or Device? */ 
    445445                if (sb->enable_USBP4_device) { 
    446                         *(bar + UOCMUX) |= PMUX_DEVICE; 
     446                        writel(readl(bar + UOCMUX) | PMUX_DEVICE, bar + UOCMUX); 
    447447                } else { 
    448                         *(bar + UOCMUX) |= PMUX_HOST; 
     448                        writel(readl(bar + UOCMUX) | PMUX_HOST, bar + UOCMUX); 
    449449                } 
    450450 
    451451                /* Overcurrent configuration */ 
    452452                if (sb->enable_USBP4_overcurrent) { 
    453                         *(bar + UOCCAP) |= sb->enable_USBP4_overcurrent; 
     453                        writel(readl(bar + UOCCAP) 
     454                               | sb->enable_USBP4_overcurrent, bar + UOCCAP); 
    454455                } 
    455456        } 
     
    465466                                PCI_DEVICE_ID_AMD_CS5536_UDC, 0); 
    466467                if (dev) { 
    467                         bar = (uint32_t *) pci_read_config32(dev,  
     468                        bar = (uint8_t *) pci_read_config32(dev,  
    468469                                        PCI_BASE_ADDRESS_0); 
    469                         *(bar + UDCDEVCTL) |= UDC_SD_SET; 
     470                        writel(readl(bar + UDCDEVCTL) | UDC_SD_SET, 
     471                               bar + UDCDEVCTL); 
    470472 
    471473                } 
     
    474476                                PCI_DEVICE_ID_AMD_CS5536_OTG, 0); 
    475477                if (dev) { 
    476                         bar = (uint32_t *) pci_read_config32(dev, 
     478                        bar = (uint8_t *) pci_read_config32(dev, 
    477479                                        PCI_BASE_ADDRESS_0); 
    478                         *(bar + UOCCTL) |= PADEN_SET; 
    479                         *(bar + UOCCAP) |= APU_SET; 
     480                        writel(readl(bar + UOCCTL) | PADEN_SET, bar + UOCCTL); 
     481                        writel(readl(bar + UOCCAP) | APU_SET, bar + UOCCAP); 
    480482                } 
    481483        }