diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch')
-rw-r--r-- | packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch | 307 |
1 files changed, 0 insertions, 307 deletions
diff --git a/packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch b/packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch deleted file mode 100644 index be9be86b82..0000000000 --- a/packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch +++ /dev/null @@ -1,307 +0,0 @@ -Index: cx3110x-0.8.1/src/sm_drv_spi.c -=================================================================== ---- cx3110x-0.8.1.orig/src/sm_drv_spi.c 2008-04-28 18:30:22.000000000 -0300 -+++ cx3110x-0.8.1/src/sm_drv_spi.c 2008-04-28 18:30:25.000000000 -0300 -@@ -99,10 +99,10 @@ - struct net_local *lp = dev->priv; - uint32_t host_ints, host_ints_ack, target_ints; - unsigned long timeout; -- int result; -+ int result, pass = 1; - - DEBUG(DBG_BH, "w\n"); -- -+again: - /* Here we wake the target up */ - target_ints = SPI_TARGET_INT_WAKEUP; - sm_spi_write(dev, SPI_ADRS_ARM_INTERRUPTS, -@@ -117,6 +117,11 @@ - if (time_after(jiffies, timeout)) { - printk(KERN_WARNING "We haven't got a READY interrupt" - " from WAKEUP. (firmware crashed?)\n"); -+ if (pass == 1) { -+ printk(KERN_WARNING "Try again...\n"); -+ pass = 2; -+ goto again; -+ } - lp->device_state = DEVSTATE_DEAD; - result = -1; - goto exit; -@@ -131,7 +136,10 @@ - (unsigned char *)&host_ints_ack, sizeof(host_ints_ack)); - - result = 0; -- -+ -+ if (pass == 2) { -+ printk(KERN_WARNING "succeeded!!!\n"); -+ } - exit: - DEBUG(DBG_BH, "W\n"); - return result; -@@ -150,49 +158,84 @@ - return 0; - } - --static int sm_drv_spi_rx(struct net_device *dev) -+static int sm_drv_spi_is_rx_frame_available(struct net_device *dev) -+{ -+ uint32_t host_ints, host_ints_ack; -+ sm_spi_read(dev, SPI_ADRS_HOST_INTERRUPTS, (unsigned char *)&host_ints, sizeof(host_ints)); -+ if ((host_ints & SPI_HOST_INT_UPDATE) || (host_ints & SPI_HOST_INT_SW_UPDATE)) { -+ host_ints_ack = SPI_HOST_INT_UPDATE | SPI_HOST_INT_SW_UPDATE; -+ sm_spi_write(dev, SPI_ADRS_HOST_INT_ACK, (unsigned char *)&host_ints_ack, sizeof(host_ints_ack)); -+ return 1; -+ } -+ return 0; -+} -+ -+static struct s_ic_msg * sm_drv_spi_alloc_frame_and_start_rx_transfer(struct net_device *dev) - { - struct net_local *lp = dev->priv; -- struct spi_hif_local_data *hif_lp = HIF_LP(lp); - struct s_sm_frame *frame; -+ unsigned short length; - struct s_ic_msg *ic_msg; -+ -+ frame = frame_skb_alloc(dev, lp->sm_descr.mtu + lp->sm_descr.rxoffset, 0); -+ if (frame == NULL) return NULL; -+ -+ /* dummy read to flush SPI DMA controller bug */ -+ sm_spi_read(dev, SPI_ADRS_GEN_PURP_1, (unsigned char *)&length, sizeof(length)); -+ -+ sm_spi_read(dev, SPI_ADRS_DMA_DATA, (unsigned char *)&length, sizeof(length)); -+ DEBUG(DBG_BH, "%s: received frame len=%d\n", DRIVER_NAME, length); -+ -+ if (length > SPI_MAX_PACKET_SIZE) -+ length = SPI_MAX_PACKET_SIZE; -+ -+ sm_spi_dma_read_start(dev, SPI_ADRS_DMA_DATA, (unsigned char *) frame->data, length); -+ -+ ic_msg = FRAME_ICMSG(frame); -+ ic_msg->frame = frame; -+ ic_msg->channel = 0; -+ ic_msg->flags = 0; -+ ic_msg->length = length; -+ ic_msg->address = 0; -+ ic_msg->data = frame->data; -+ -+ return ic_msg; -+} -+ -+static int sm_drv_spi_rx(struct net_device *dev) -+{ -+ struct net_local *lp = dev->priv; -+ struct spi_hif_local_data *hif_lp = HIF_LP(lp); -+ struct s_ic_msg *ic_msg, *ic_msg_next; - int result, err; -- unsigned short length; - int32_t callb_mask = 0; -- -+ - err = sm_drv_spi_wakeup(dev); - if (err < 0) { - result = -1; - goto exit; - } - -- frame = frame_skb_alloc(dev, lp->sm_descr.mtu + lp->sm_descr.rxoffset, -- 0); -- if (frame != NULL) { -- ic_msg = FRAME_ICMSG(frame); -- ic_msg->frame = frame; -- -- /* dummy read to flush SPI DMA controller bug */ -- sm_spi_read(dev, SPI_ADRS_GEN_PURP_1, (unsigned char *)&length, -- sizeof(length)); -- -- sm_spi_read(dev, SPI_ADRS_DMA_DATA, (unsigned char *)&length, -- sizeof(length)); -- -- DEBUG(DBG_BH, "%s: received frame len=%d\n", DRIVER_NAME, -- length); -- -- if (length > SPI_MAX_PACKET_SIZE) -- length = SPI_MAX_PACKET_SIZE; -+ ic_msg_next = sm_drv_spi_alloc_frame_and_start_rx_transfer(dev); -+ if (ic_msg_next == NULL) { -+ printk("Couldn't allocate RX frame\n"); -+ result = -1; -+ goto exit; -+ } - -- sm_spi_dma_read(dev, SPI_ADRS_DMA_DATA, -- (unsigned char *) frame->data, length); -- -- ic_msg->channel = 0; -- ic_msg->flags = 0; -- ic_msg->length = length; -- ic_msg->address = 0; -- ic_msg->data = frame->data; -+ while (ic_msg_next) { -+ sm_spi_dma_read_wait_for_completion(); -+ ic_msg = ic_msg_next; -+ ic_msg_next = NULL; -+ -+ if (sm_drv_spi_is_rx_frame_available(dev)) { -+ ic_msg_next = sm_drv_spi_alloc_frame_and_start_rx_transfer(dev); -+ if (ic_msg_next == NULL) { -+ printk("Couldn't allocate RX frame\n"); -+ result = -1; -+ goto exit; -+ } -+ } - - hif_lp->spi_packets++; - spin_lock_bh(&lp->sm_lock); -@@ -207,13 +250,14 @@ - - DEBUG(DBG_IC,"Callback mask: %d\n", callb_mask); - -- if(callb_mask < 0) -+ if (callb_mask < 0) { - printk(KERN_WARNING "prism_interconnect_message_handle" - "returned error %d\n", callb_mask); -- } else -- printk("Couldn't allocate RX frame\n"); -- -- handle_sm_callback(dev, callb_mask); -+ result = -1; -+ goto exit; -+ } -+ handle_sm_callback(dev, callb_mask); -+ } - - result = 0; - -Index: cx3110x-0.8.1/src/sm_drv_spi_io.c -=================================================================== ---- cx3110x-0.8.1.orig/src/sm_drv_spi_io.c 2008-04-28 18:30:25.000000000 -0300 -+++ cx3110x-0.8.1/src/sm_drv_spi_io.c 2008-04-28 18:35:59.000000000 -0300 -@@ -120,7 +120,7 @@ - } - - --int cx3110x_spi_dma_read(struct net_device *dev, unsigned long address, void * buffer, unsigned int length) -+int cx3110x_spi_dma_read_start(struct net_device *dev, unsigned long address, void * buffer, unsigned int length) - { - SPI_CS_ON(); - -@@ -170,13 +170,22 @@ - omap_start_dma(spi_dma.dma_rx_ch); - omap_start_dma(spi_dma.dma_tx_ch); - -- /* Wait for reading to complete */ -- while(!spi_dma.dma_rx_done) { -- udelay(5); -+ return 0; -+} -+ -+int cx3110x_spi_dma_read_wait_for_completion() -+{ -+ int wait_limit = 15000 * 5; -+ int wait_cycles = 0; -+ -+ /* Wait for DMA reading to complete */ -+ while ((!spi_dma.dma_rx_done || !spi_dma.dma_tx_done) && wait_cycles < wait_limit) { -+ wait_cycles++; -+ udelay(1); - } - -- while(!spi_dma.dma_tx_done) { -- udelay(5); -+ if (wait_cycles >= wait_limit) { -+ printk("McBSP read DMA timeout, spi_dma.dma_rx_done=%d, spi_dma.dma_tx_done=%d\n", spi_dma.dma_rx_done, spi_dma.dma_tx_done); - } - - spi_dma.dma_rx_done = 0; -@@ -184,11 +193,14 @@ - - SPI_CS_OFF(); - -- return 0; -+ return wait_cycles; - } - - int cx3110x_spi_dma_write(struct net_device *dev, unsigned long address, void * buffer, unsigned int length) - { -+ int wait_limit = 15000 * 5; -+ int wait_cycles = 0; -+ - SPI_CS_ON(); - - omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, address << 8); -@@ -239,16 +251,20 @@ - omap_start_dma(spi_dma.dma_rx_ch); - omap_start_dma(spi_dma.dma_tx_ch); - -- /* We don't want to turn CS off before transfer is done */ -- -- while(!spi_dma.dma_rx_done) { -- udelay(5); -+ /* Wait for DMA writing to complete */ -+ while ((!spi_dma.dma_rx_done || !spi_dma.dma_tx_done) && wait_cycles < wait_limit) { -+ wait_cycles++; -+ udelay(1); - } - - while(!spi_dma.dma_tx_done) { - udelay(5); - } - -+ if (wait_cycles >= wait_limit) { -+ printk("McBSP write DMA timeout, spi_dma.dma_rx_done=%d, spi_dma.dma_tx_done=%d\n", spi_dma.dma_rx_done, spi_dma.dma_tx_done); -+ } -+ - spi_dma.dma_rx_done = 0; - spi_dma.dma_tx_done = 0; - -@@ -320,7 +336,7 @@ - int cx3110x_spi_start(struct net_device *dev) - { - struct omap_mcbsp_spi_cfg spi_cfg; -- int r, div = 1, rate_mhz, max_mhz = 14; -+ int r, div = 1, rate_mhz, max_mhz = 16; - struct net_local * lp; - struct spi_hif_local_data * spi_lp; - -@@ -368,11 +384,11 @@ - - cx3110x_hw_reset(); - -- while(rate_mhz/div >= max_mhz) -+ while(rate_mhz/(div+1) >= max_mhz) - div++; - -- printk("McBSP2: freq_limit=%dMHz, base_freq=%dMHz, divisor=%d (%d.%dMHz)\n", -- max_mhz, rate_mhz, div, rate_mhz / div, (rate_mhz * 10 / div) % 10); -+ printk("McBSP2: freq_limit=%dMHz, base_freq=%dMHz, div=%d (%d.%dMHz)\n", -+ max_mhz, rate_mhz, div, rate_mhz / (div+1), (rate_mhz * 10 / (div+1)) % 10); - - spi_dma.dma_tx_done = 0; - spi_dma.dma_rx_done = 0; -Index: cx3110x-0.8.1/src/sm_drv_spi_io.h -=================================================================== ---- cx3110x-0.8.1.orig/src/sm_drv_spi_io.h 2008-04-28 18:30:22.000000000 -0300 -+++ cx3110x-0.8.1/src/sm_drv_spi_io.h 2008-04-28 18:30:25.000000000 -0300 -@@ -27,15 +27,17 @@ - - int cx3110x_spi_read(struct net_device * dev, unsigned long address, unsigned char * buffer, unsigned int length); - int cx3110x_spi_write(struct net_device * dev, unsigned long address, unsigned char * buffer, unsigned int length); --int cx3110x_spi_dma_read(struct net_device *dev, unsigned long address, void * buffer, unsigned int length); -+int cx3110x_spi_dma_read_start(struct net_device *dev, unsigned long address, void * buffer, unsigned int length); -+int cx3110x_spi_dma_read_wait_for_completion(void); - int cx3110x_spi_dma_write(struct net_device *dev, unsigned long address, void * buffer, unsigned int length); - - void cx3110x_dump_register(struct net_device * dev); - --#define sm_spi_read(dev, addr, data, len) cx3110x_spi_read(dev, (addr), (data), (len)) -+#define sm_spi_read(dev, addr, data, len) cx3110x_spi_read(dev, (addr), (data), (len)) - #define sm_spi_write(dev, addr, data, len) cx3110x_spi_write(dev, (addr), (data), (len)) - --#define sm_spi_dma_read(dev, addr, data, len) cx3110x_spi_dma_read(dev, (addr), (data), (len)) -+#define sm_spi_dma_read_start(dev, addr, data, len) cx3110x_spi_dma_read_start(dev, (addr), (data), (len)) -+#define sm_spi_dma_read_wait_for_completion() cx3110x_spi_dma_read_wait_for_completion() - #define sm_spi_dma_write(dev, addr, data, len) cx3110x_spi_dma_write(dev, (addr), (data), (len)) - - #endif |