Date: Thu, 4 Aug 2011 14:06:32 GMT From: Jakub Wojciech Klama <jceel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 197184 for review Message-ID: <201108041406.p74E6WIe062027@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@197184?ac=10 Change 197184 by jceel@jceel_cyclone on 2011/08/04 14:05:30 Remove unneeded files from previous commit. Affected files ... .. //depot/projects/soc2011/jceel_lpc/sys/arm/conf/EA3250#9 edit .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/files.lpc#8 edit .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_dmac.c#2 delete .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_mmc.c#4 edit .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpcreg.h#8 edit .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpcvar.h#6 edit .. //depot/projects/soc2011/jceel_lpc/sys/boot/fdt/dts/ea3250.dts#9 edit Differences ... ==== //depot/projects/soc2011/jceel_lpc/sys/arm/conf/EA3250#9 (text+ko) ==== @@ -97,9 +97,6 @@ device lpcfb -# DMAC -device dmac - # Flattened Device Tree options FDT options FDT_DTB_STATIC ==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/files.lpc#8 (text+ko) ==== @@ -15,7 +15,6 @@ arm/lpc/lpc_fb.c optional lpcfb arm/lpc/lpc_gpio.c optional lpcgpio arm/lpc/lpc_spi.c optional lpcspi -arm/lpc/lpc_dmac.c optional dmac arm/lpc/ssd1289.c optional ssd1289 dev/uart/uart_dev_ns8250.c optional uart kern/kern_clocksource.c standard ==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpc_mmc.c#4 (text+ko) ==== @@ -69,12 +69,10 @@ device_t lm_dev; struct mtx lm_mtx; struct resource * lm_mem_res; - struct resource * lm_cmd_irq_res; - struct resource * lm_data_irq_res; + struct resource * lm_irq_res; bus_space_tag_t lm_bst; bus_space_handle_t lm_bsh; - void * lm_cmd_intrhand; - void * lm_data_intrhand; + void * lm_intrhand; struct mmc_host lm_host; struct mmc_request * lm_req; struct mmc_data * lm_data; @@ -89,26 +87,10 @@ #define LPC_SD_BLOCKSIZE 512 -#define LPC_SD_CMD_MASK \ - (LPC_SD_STATUS_CMDSENT | LPC_SD_STATUS_CMDRESPEND | \ - LPC_SD_STATUS_CMDTIMEOUT | LPC_SD_STATUS_CMDCRCFAIL | \ - LPC_SD_STATUS_STARTBITERR) - -#define LPC_SD_DATA_MASK \ - (LPC_SD_STATUS_RXDATAAVLBL | LPC_SD_STATUS_TXDATAAVLBL | \ - LPC_SD_STATUS_RXFIFOEMPTY | LPC_SD_STATUS_TXFIFOEMPTY | \ - LPC_SD_STATUS_RXFIFOFULL | LPC_SD_STATUS_TXFIFOFULL | \ - LPC_SD_STATUS_RXFIFOHALFFULL | LPC_SD_STATUS_TXFIFOHALFEMPTY | \ - LPC_SD_STATUS_RXACTIVE | LPC_SD_STATUS_TXACTIVE | \ - LPC_SD_STATUS_DATABLOCKEND | LPC_SD_STATUS_DATAEND | \ - LPC_SD_STATUS_RXOVERRUN | LPC_SD_STATUS_TXUNDERRUN | \ - LPC_SD_STATUS_DATATIMEOUT | LPC_SD_STATUS_DATACRCFAIL) - static int lpc_mmc_probe(device_t); static int lpc_mmc_attach(device_t); static int lpc_mmc_detach(device_t); -static void lpc_mmc_cmd_intr(void *); -static void lpc_mmc_data_intr(void *); +static void lpc_mmc_intr(void *); static void lpc_mmc_cmd(struct lpc_mmc_softc *, struct mmc_command *); static void lpc_mmc_setup_xfer(struct lpc_mmc_softc *, struct mmc_data *); @@ -166,50 +148,28 @@ device_printf(dev, "virtual register space: 0x%08lx\n", sc->lm_bsh); rid = 0; - sc->lm_cmd_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + sc->lm_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE); - if (!sc->lm_cmd_irq_res) { - device_printf(dev, "cannot allocate cmd interrupt\n"); + if (!sc->lm_irq_res) { + device_printf(dev, "cannot allocate interrupt\n"); bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lm_mem_res); return (ENXIO); } - rid = 1; - sc->lm_data_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, - RF_ACTIVE); - if (!sc->lm_data_irq_res) { - device_printf(dev, "cannot allocate data interrupt\n"); - bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lm_mem_res); - return (ENXIO); - } - - - if (bus_setup_intr(dev, sc->lm_cmd_irq_res, INTR_TYPE_MISC | INTR_MPSAFE, - NULL, lpc_mmc_cmd_intr, sc, &sc->lm_cmd_intrhand)) + if (bus_setup_intr(dev, sc->lm_irq_res, INTR_TYPE_MISC | INTR_MPSAFE, + NULL, lpc_mmc_intr, sc, &sc->lm_intrhand)) { bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lm_mem_res); - bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lm_cmd_irq_res); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lm_irq_res); device_printf(dev, "cannot setup interrupt handler\n"); return (ENXIO); } - if (bus_setup_intr(dev, sc->lm_data_irq_res, INTR_TYPE_MISC | INTR_MPSAFE, - NULL, lpc_mmc_data_intr, sc, &sc->lm_data_intrhand)) - { - bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lm_mem_res); - bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lm_cmd_irq_res); - device_printf(dev, "cannot setup interrupt handler\n"); - return (ENXIO); - } - sc->lm_host.f_min = 312500; - sc->lm_host.f_max = 3125000;//25000000; + sc->lm_host.f_max = 25000000; sc->lm_host.host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340; sc->lm_host.caps = MMC_CAP_4_BIT_DATA; - bus_space_write_4(sc->lm_bst, 0xd0028000, 0x70, (1 << 15)); - bus_space_write_4(sc->lm_bst, 0xd0028000, 0x64, (1 << 15)); - lpc_pwr_write(dev, LPC_CLKPWR_MS_CTRL, LPC_CLKPWR_MS_CTRL_CLOCK_EN | LPC_CLKPWR_MS_CTRL_SD_CLOCK | 1); lpc_mmc_write_4(sc, LPC_SD_POWER, LPC_SD_POWER_CTRL_ON); @@ -219,11 +179,9 @@ child = device_add_child(dev, "mmc", -1); if (!child) { device_printf(dev, "attaching MMC bus failed!\n"); - bus_teardown_intr(dev, sc->lm_cmd_irq_res, sc->lm_cmd_intrhand); - bus_teardown_intr(dev, sc->lm_data_irq_res, sc->lm_data_intrhand); + bus_teardown_intr(dev, sc->lm_irq_res, sc->lm_intrhand); bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lm_mem_res); - bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lm_cmd_irq_res); - bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lm_data_irq_res); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lm_irq_res); return (ENXIO); } @@ -242,7 +200,7 @@ } static void -lpc_mmc_cmd_intr(void *arg) +lpc_mmc_intr(void *arg) { struct lpc_mmc_softc *sc = (struct lpc_mmc_softc *)arg; struct mmc_command *cmd; @@ -250,7 +208,17 @@ status = lpc_mmc_read_4(sc, LPC_SD_STATUS); - device_printf(sc->lm_dev, "cmd interrupt: 0x%08x\n", status); + device_printf(sc->lm_dev, "interrupt: 0x%08x\n", status); + + if (status & LPC_SD_STATUS_TXACTIVE) { + device_printf(sc->lm_dev, "TX active\n"); + lpc_mmc_fifo_write(sc); + } + + if (status & LPC_SD_STATUS_RXACTIVE) { + device_printf(sc->lm_dev, "RX active\n"); + lpc_mmc_fifo_read(sc); + } if (status & LPC_SD_STATUS_CMDCRCFAIL) { device_printf(sc->lm_dev, "command CRC error\n"); @@ -275,6 +243,10 @@ sc->lm_req = NULL; } + if (status & LPC_SD_STATUS_DATATIMEOUT) { + device_printf(sc->lm_dev, "data timeout\n"); + lpc_mmc_write_4(sc, LPC_SD_CLEAR, LPC_SD_STATUS_DATATIMEOUT); + } #if 0 if (status & LPC_SD_STATUS_TXUNDERRUN) { @@ -346,48 +318,12 @@ device_printf(sc->lm_dev, "isr done\n"); } -static void -lpc_mmc_data_intr(void *arg) -{ - struct lpc_mmc_softc *sc = (struct lpc_mmc_softc *)arg; - uint32_t status; - - status = lpc_mmc_read_4(sc, LPC_SD_STATUS); - - //device_printf(sc->lm_dev, "data interrupt: 0x%08x\n", status); - - if (status & LPC_SD_STATUS_TXACTIVE) { - device_printf(sc->lm_dev, "TX active\n"); - lpc_mmc_fifo_write(sc); - } - - if (status & LPC_SD_STATUS_RXACTIVE) { - //device_printf(sc->lm_dev, "RX active\n"); - lpc_mmc_fifo_read(sc); - } - - if (status & LPC_SD_STATUS_DATATIMEOUT) { - device_printf(sc->lm_dev, "data timeout\n"); - lpc_mmc_write_4(sc, LPC_SD_CLEAR, LPC_SD_STATUS_DATATIMEOUT); - } - - if (status & LPC_SD_STATUS_DATAEND) { - device_printf(sc->lm_dev, "data end, transffered %d bytes\n", - sc->lm_xfer_done); - lpc_mmc_write_4(sc, LPC_SD_CLEAR, LPC_SD_STATUS_DATAEND); - lpc_mmc_write_4(sc, LPC_SD_CLEAR, LPC_SD_STATUS_DATABLOCKEND); - } - - - //lpc_mmc_write_4(sc, LPC_SD_MASK1, 0); -} - static int lpc_mmc_request(device_t bus, device_t child, struct mmc_request *req) { struct lpc_mmc_softc *sc = device_get_softc(bus); - //device_printf(bus, "lpc_mmc_request: %p\n", req); + device_printf(bus, "lpc_mmc_request: %p\n", req); lpc_mmc_lock(sc); if (sc->lm_req) @@ -411,7 +347,7 @@ //struct mmc_data *data = cmd->data; uint32_t cmdreg = 0; - //device_printf(sc->lm_dev, "cmd: %d arg: 0x%08x\n", cmd->opcode, cmd->arg); + device_printf(sc->lm_dev, "cmd: %d arg: 0x%08x\n", cmd->opcode, cmd->arg); if (cmd->flags & MMC_RSP_PRESENT) cmdreg |= LPC_SD_COMMAND_RESPONSE; @@ -425,12 +361,12 @@ cmdreg |= LPC_SD_COMMAND_ENABLE; cmdreg |= (cmd->opcode & LPC_SD_COMMAND_CMDINDEXMASK); - lpc_mmc_write_4(sc, LPC_SD_MASK0, LPC_SD_CMD_MASK); - lpc_mmc_write_4(sc, LPC_SD_MASK1, LPC_SD_DATA_MASK); + lpc_mmc_write_4(sc, LPC_SD_MASK0, 0xffffffff); + lpc_mmc_write_4(sc, LPC_SD_MASK1, 0xffffffff); lpc_mmc_write_4(sc, LPC_SD_ARGUMENT, cmd->arg); lpc_mmc_write_4(sc, LPC_SD_COMMAND, cmdreg); - //device_printf(sc->lm_dev, "cmdarg: 0x%08x, cmdreg: 0x%08x\n", cmd->arg, cmdreg); + device_printf(sc->lm_dev, "cmdarg: 0x%08x, cmdreg: 0x%08x\n", cmd->arg, cmdreg); } static void @@ -441,7 +377,7 @@ sc->lm_data = data; sc->lm_xfer_done = 0; - //device_printf(sc->lm_dev, "setup_xfer data: %p\n", data); + device_printf(sc->lm_dev, "setup_xfer data: %p\n", data); if (data->flags & MMC_DATA_READ) sc->lm_xfer_direction = DIRECTION_READ; @@ -453,14 +389,14 @@ ? LPC_SD_DATACTRL_WRITE : LPC_SD_DATACTRL_READ); - datactrl |= LPC_SD_DATACTRL_ENABLE | LPC_SD_DATACTRL_MODE; + datactrl |= LPC_SD_DATACTRL_ENABLE; - //if (data->len > LPC_SD_BLOCKSIZE) - datactrl |= 0x20; + if (data->len > LPC_SD_BLOCKSIZE) + datactrl |= 0x90; - //device_printf(sc->lm_dev, "setup_xfer: datactrl=0x%08x\n", datactrl); + device_printf(sc->lm_dev, "setup_xfer: datactrl=0x%08x\n", datactrl); - lpc_mmc_write_4(sc, LPC_SD_DATATIMER, 0xFFFF0000); + lpc_mmc_write_4(sc, LPC_SD_DATATIMER, 0x100000); lpc_mmc_write_4(sc, LPC_SD_DATALENGTH, data->len); lpc_mmc_write_4(sc, LPC_SD_DATACTRL, datactrl); @@ -473,12 +409,12 @@ { do { uint32_t *data = sc->lm_data->data; - // int todo = sc->lm_data->len > 16 ? 16 : (sc->lm_data->len / 4) - sc->lm_xfer_done; - //device_printf(sc->lm_dev, "reading from fifo %d words [%d of %d words done]\n", - //todo, sc->lm_xfer_done, (sc->lm_data->len / 4)); - - while ((lpc_mmc_read_4(sc, LPC_SD_STATUS) & LPC_SD_STATUS_RXDATAAVLBL)) { - + int i; + int todo = sc->lm_data->len > 16 ? 16 : (sc->lm_data->len / 4) - sc->lm_xfer_done; + device_printf(sc->lm_dev, "reading from fifo %d words [%d of %d words done]\n", + todo, sc->lm_xfer_done, (sc->lm_data->len / 4)); + + for (i = 0; i < 16; i++) { data[sc->lm_xfer_done] = lpc_mmc_read_4(sc, LPC_SD_FIFO); sc->lm_xfer_done++; @@ -492,12 +428,11 @@ */ //sc->lm_xfer_done += 16; - } while (sc->lm_xfer_done < (sc->lm_data->len / 4)); + device_printf(sc->lm_dev, "currently done %d\n", sc->lm_xfer_done); + kdb_enter("data read", "data read"); + } while (lpc_mmc_read_4(sc, LPC_SD_STATUS) & LPC_SD_STATUS_RXDATAAVLBL); - device_printf(sc->lm_dev, "read done, read %d bytes, status: 0x%08x\n", - sc->lm_xfer_done, lpc_mmc_read_4(sc, LPC_SD_STATUS)); - - lpc_mmc_write_4(sc, LPC_SD_CLEAR, LPC_SD_STATUS_DATACRCFAIL); + device_printf(sc->lm_dev, "partial read done\n"); } static void @@ -625,7 +560,7 @@ if ((LPC_SD_CLK / (2 * (clkdiv + 1))) > ios->clock) clkdiv++; - //device_printf(bus, "clock: %dHz, clkdiv: %d\n", ios->clock, clkdiv); + device_printf(bus, "clock: %dHz, clkdiv: %d\n", ios->clock, clkdiv); lpc_mmc_write_4(sc, LPC_SD_CLOCK, clkdiv | LPC_SD_CLOCK_ENABLE); return (0); ==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpcreg.h#8 (text+ko) ==== @@ -141,7 +141,6 @@ #define LPC_CLKPWR_MS_CTRL_SD_CLOCK (1 << 5) #define LPC_CLKPWR_MS_CTRL_CLKDIV_MASK 0xf #define LPC_CLKPWR_DMACLK_CTRL 0xe8 -#define LPC_CLKPWR_DMACLK_CTRL_EN (1 << 0) #define LPC_CLKPWR_FLASHCLK_CTRL 0xc8 #define LPC_CLKPWR_MACCLK_CTRL 0x90 #define LPC_CLKPWR_LCDCLK_CTRL 0x54 @@ -561,8 +560,6 @@ #define LPC_DMAC_SOFTLSREQ 0x2c #define LPC_DMAC_CONFIG 0x30 #define LPC_DMAC_CHADDR(_n) (0x100 + (_n * 0x20)) -#define LPC_DMAC_CHNUM 8 -#define LPC_DMAC_CHSIZE 0x20 #define LPC_DMAC_CH_SRCADDR 0x00 #define LPC_DMAC_CH_DSTADDR 0x04 #define LPC_DMAC_CH_LLI 0x08 @@ -585,10 +582,6 @@ #define LPC_DMAC_CH_CONFIG_ITC (1 << 15) #define LPC_DMAC_CH_CONFIG_IE (1 << 14) #define LPC_DMAC_CH_CONFIG_FLOWCNTL(_n) ((_n & 0x7) << 11) -#define LPC_DMAC_CH_FCNTL_MEM_TO_MEM 0 -#define LPC_DMAC_CH_FCNTL_MEM_TO_DEV 1 -#define LPC_DMAC_CH_FCNTL_DEV_TO_MEM 2 -#define LPC_DMAC_CH_FCNTL_DEV_TO_DEV 3 #define LPC_DMAC_CH_CONFIG_DESTP(_n) ((_n & 0x1f) << 6) #define LPC_DMAC_CH_CONFIG_SRCP(_n) ((_n & 0x1f) << 1) #define LPC_DMAC_CH_CONFIG_E (1 << 0) ==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/lpcvar.h#6 (text+ko) ==== @@ -44,13 +44,10 @@ /* DMA */ struct lpc_dmac_channel_config { - int ldc_fcntl; int ldc_src_periph; + int ldc_dst_periph; int ldc_src_width; - int ldc_src_incr; - int ldc_dst_periph; int ldc_dst_width; - int ldc_dst_incr; void (*ldc_success_handler)(void); void (*ldc_error_handler)(void); }; ==== //depot/projects/soc2011/jceel_lpc/sys/boot/fdt/dts/ea3250.dts#9 (text+ko) ==== @@ -179,13 +179,6 @@ compatible = "simple-bus"; ranges = <0x0 0x30000000 0x10000000>; - dmac@100000 { - compatible = "lpc,dmac"; - reg = <0x100000 0x20000>; - interrupts = <28>; - interrupt-parent = <&PIC>; - }; - usb@1020000 { compatible = "lpc,usb-ohci", "usb-ohci"; reg = <0x1020000 0x20000>;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108041406.p74E6WIe062027>