Changeset 3738


Ignore:
Timestamp:
12/27/07 00:08:04 (5 years ago)
Author:
andrew
Message:

SDIO CMD5 doesn't change state in "initialization".
Don't reset the always-one flags in card status word.
Common CIS pointer is an offset from CIA, not CIS start.
Add some common CIS tuples similar to those on a real AR6001.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/host/qemu-neo1973/hw/ar6000.c

    r3736 r3738  
    304304            /* We accept any voltage.  10000 V is nothing.  */ 
    305305            if (req.arg) { 
    306                 sd->state = sd_ready_state; 
     306                sd->state = sd_initialization_state; 
    307307                sd->sdio_ok = 1; 
    308308            } 
     
    457457    } 
    458458 
    459     sd->card_status &= ~CARD_STATUS_B; 
     459    sd->card_status &= ~(COM_CRC_ERROR | ILLEGAL_COMMAND);      /* B type */ 
    460460 
    461461    rtype = sdio_normal_command(sd, *req); 
     
    587587    return sd->state == sd_transfer_state; 
    588588} 
     589 
     590#define SDIO_CIS_START  0x1000 
    589591 
    590592static void sdio_cccr_write(struct sdio_s *sd, uint32_t offset, uint8_t value) 
     
    661663    switch (offset) { 
    662664    case 0x00:  /* CCCR/SDIO Revison */ 
    663         return 0x32; 
     665        return 0x32;    /* SDIO Specification Version 2.00, CCCR/FBR V 1.20 */ 
    664666 
    665667    case 0x01:  /* SD Specification Revision */ 
     
    683685    case 0x08:  /* Card Capability */ 
    684686        /* XXX: set SDC (01) when CMD52 learns to preserve current_cmd */ 
     687        /* XXX: need to addr ReadWait support too (RWC (04)) */ 
    685688        return 0x12 | sd->cccr.e4mi;    /* SMB | S4MI | E4MI | Full-Speed */ 
    686689 
    687690    case 0x09:  /* Common CIS Pointer */ 
     691        return (SDIO_CIS_START >>  0) & 0xff; 
    688692    case 0x0a:  /* Common CIS Pointer */ 
     693        return (SDIO_CIS_START >>  8) & 0xff; 
    689694    case 0x0b:  /* Common CIS Pointer */ 
    690         return 0x00;    /* Starts at 0x1000 */ 
     695        return (SDIO_CIS_START >> 16) & 0xff; 
    691696 
    692697    case 0x1c:  /* Bus Suspend */ 
     
    769774 
    770775    /* RFU */ 
    771     if (len && unlikely(addr < 0x1000)) { 
    772         llen = sd->transfer.step ? MIN(len, 0x1000 - addr) : len; 
     776    if (len && unlikely(addr < SDIO_CIS_START)) { 
     777        llen = sd->transfer.step ? MIN(len, SDIO_CIS_START - addr) : len; 
    773778        memset(data, 0, llen); 
    774779        data += llen; 
    775780        len -= llen; 
    776         addr = 0x1000; 
     781        addr = SDIO_CIS_START; 
    777782    } 
    778783 
    779784    /* CIS */ 
    780     addr -= 0x1000; 
     785    addr -= SDIO_CIS_START; 
    781786    if (len && addr < sd->cislen) { 
    782787        llen = MIN(len, sd->cislen - addr); 
     
    856861/* TODO: dump real values from an Atheros AR6001 - need hw access! */ 
    857862const static uint8_t ar6k_cis[] = { 
     863    CISTPL_DEVICE, 3,           /* Not SDIO standard */ 
     864    0x00, 0x00, 0x00,           /* TODO */ 
     865 
    858866    CISTPL_MANFID, 4, 
    859     0x0a, 0x01,                 /* SDIO Card manufacturer code */ 
    860     0x71, 0x02,                 /* Manufacturer information (Part No, Rev) */ 
     867    0x71, 0x02,                 /* SDIO Card manufacturer code */ 
     868    0x0a, 0x01,                 /* Manufacturer information (Part No, Rev) */ 
    861869 
    862870    CISTPL_FUNCID, 2, 
    863871    0x0c,                       /* Card funcion code: SDIO */ 
    864872    0x00,                       /* System initialization mask */ 
     873 
     874    CISTPL_FUNCE, 4, 
     875    0x00,                       /* Type of extended data: Function 0 */ 
     876    0x00, 0x08,                 /* Max. block size/byte count for Fn0: 2048 */ 
     877    0x32,                       /* Max. transfer rate per line: 25 Mb/Sec */ 
    865878 
    866879    CISTPL_END, 0xff, 
Note: See TracChangeset for help on using the changeset viewer.