PERFORCE change 197184 for review
Jakub Wojciech Klama
jceel at FreeBSD.org
Thu Aug 4 14:06:33 UTC 2011
http://p4web.freebsd.org/@@197184?ac=10
Change 197184 by jceel at 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 at 100000 {
- compatible = "lpc,dmac";
- reg = <0x100000 0x20000>;
- interrupts = <28>;
- interrupt-parent = <&PIC>;
- };
-
usb at 1020000 {
compatible = "lpc,usb-ohci", "usb-ohci";
reg = <0x1020000 0x20000>;
More information about the p4-projects
mailing list