* Git tree updated to 2.6.19-rc2
@ 2006-10-23 20:39 Tony Lindgren
2006-10-24 7:53 ` Komal Shah
` (3 more replies)
0 siblings, 4 replies; 14+ messages in thread
From: Tony Lindgren @ 2006-10-23 20:39 UTC (permalink / raw)
To: linux-omap-open-source
Hi all,
I've updated our git tree to 2.6.19-rc2. At least following have
problems on omap1 (OSK):
- CONFIG_DEBUG_LL hangs system
- BUG in omap1_mbox_enable_irq
- Aic23 NULL pointer exception
So YMMV :) Anybody got patches for these issues already?
Tony
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-23 20:39 Git tree updated to 2.6.19-rc2 Tony Lindgren
@ 2006-10-24 7:53 ` Komal Shah
2006-10-28 6:31 ` Aic23 NULL pointer exception, was: " Dirk Behme
2006-10-24 11:05 ` [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2) Jonathan McDowell
` (2 subsequent siblings)
3 siblings, 1 reply; 14+ messages in thread
From: Komal Shah @ 2006-10-24 7:53 UTC (permalink / raw)
To: Tony Lindgren, linux-omap-open-source
--- Tony Lindgren <tony@atomide.com> wrote:
> Hi all,
>
> I've updated our git tree to 2.6.19-rc2. At least following have
> problems on omap1 (OSK):
>
..
> - Aic23 NULL pointer exception
>
Anything related to as discussed on davinci mailing list for I2C?
http://linux.omap.com/pipermail/davinci-linux-open-source/2006-October/001312.html
If that is the case, then please try adding zero-length transaction and
SMBUS_QUICK code as temporary hack.
---Komal Shah
http://komalshah.blogspot.com/
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2)
2006-10-23 20:39 Git tree updated to 2.6.19-rc2 Tony Lindgren
2006-10-24 7:53 ` Komal Shah
@ 2006-10-24 11:05 ` Jonathan McDowell
2006-10-24 17:57 ` David Brownell
2006-10-27 16:16 ` omap-keypad issues with 2.6.19-rc? Jonathan McDowell
2006-10-24 16:16 ` Git tree updated to 2.6.19-rc2 Dirk Behme
2006-10-26 20:22 ` David Brownell
3 siblings, 2 replies; 14+ messages in thread
From: Jonathan McDowell @ 2006-10-24 11:05 UTC (permalink / raw)
To: linux-omap-open-source
On Mon, Oct 23, 2006 at 11:39:26PM +0300, Tony Lindgren wrote:
> I've updated our git tree to 2.6.19-rc2. At least following have
> problems on omap1 (OSK):
>
> - CONFIG_DEBUG_LL hangs system
> - BUG in omap1_mbox_enable_irq
> - Aic23 NULL pointer exception
>
> So YMMV :) Anybody got patches for these issues already?
Haven't hit any of these with the Amstrad Delta defconfig so far (just
done a compile and boot so far), but did need the patch below to get
omap-rtc to compile.
Signed-Off-By: Jonathan McDowell <noodles@earth.li>
-----
diff --git a/drivers/char/omap-rtc.c b/drivers/char/omap-rtc.c
index f48563f..d57402f 100644
--- a/drivers/char/omap-rtc.c
+++ b/drivers/char/omap-rtc.c
@@ -120,7 +120,7 @@ static const unsigned char days_in_mo[]
* A very tiny interrupt handler. It runs with SA_INTERRUPT set.
*/
-irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t rtc_interrupt(int irq, void *dev_id)
{
/*
* Either an alarm interrupt or update complete interrupt.
-----
J.
--
] http://www.earth.li/~noodles/ [] How does it work? I don't know [
] PGP/GPG Key @ the.earth.li [] but it does! [
] via keyserver, web or email. [] [
] RSA: 4DC4E7FD / DSA: 5B430367 [] [
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-23 20:39 Git tree updated to 2.6.19-rc2 Tony Lindgren
2006-10-24 7:53 ` Komal Shah
2006-10-24 11:05 ` [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2) Jonathan McDowell
@ 2006-10-24 16:16 ` Dirk Behme
2006-10-27 12:50 ` tony
2006-10-26 20:22 ` David Brownell
3 siblings, 1 reply; 14+ messages in thread
From: Dirk Behme @ 2006-10-24 16:16 UTC (permalink / raw)
To: Tony Lindgren; +Cc: linux-omap-open-source
[-- Attachment #1: Type: text/plain, Size: 1142 bytes --]
Tony Lindgren wrote:
> - CONFIG_DEBUG_LL hangs system
For reference see
http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008025.html
and
http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008054.html
for an ugly workaround if you really need it. I really have
no clue what is broken here.
> - BUG in omap1_mbox_enable_irq
I think you mean
Unbalanced enable for IRQ 10
BUG: warning at kernel/irq/manage.c:118/enable_irq()
printed in bootmessages.
I spent some minutes for this as well. It is MPU "dsp"
interrupt which is enabled in omap1_mbox_enable_irq() by
enable_irq(mbox->irq);
In kernel/irq/manage.c function enable_irq() checks for
desc->depth and if it is 0 it prints above message. Seems
that desc->depth has to be >= 1.
The comment tells us
* Undoes the effect of one call to disable_irq(). If this
* matches the last disable, processing of interrupts on this
* IRQ line is re-enabled.
so seems that before calling enable_irq() at least one
disable_irq() is needed.
I don't know if patch in attachment is a valid patch or only
a workaround. What do you think?
Best regards
Dirk
[-- Attachment #2: mailbox_irq_patch.txt --]
[-- Type: text/plain, Size: 385 bytes --]
--- arch/arm/plat-omap/mailbox.c_orig 2006-10-24 18:08:06.000000000 +0200
+++ arch/arm/plat-omap/mailbox.c 2006-10-24 18:10:58.000000000 +0200
@@ -237,6 +237,7 @@ static int omap_mbox_init(struct omap_mb
"failed to register mailbox interrupt:%d\n", ret);
goto fail1;
}
+ disable_mbox_irq(mbox, IRQ_RX);
enable_mbox_irq(mbox, IRQ_RX);
spin_lock_init(&mbox->lock);
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2)
2006-10-24 11:05 ` [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2) Jonathan McDowell
@ 2006-10-24 17:57 ` David Brownell
2006-10-27 12:45 ` tony
2006-10-27 16:16 ` omap-keypad issues with 2.6.19-rc? Jonathan McDowell
1 sibling, 1 reply; 14+ messages in thread
From: David Brownell @ 2006-10-24 17:57 UTC (permalink / raw)
To: linux-omap-open-source
On Tuesday 24 October 2006 4:05 am, Jonathan McDowell wrote:
> Haven't hit any of these with the Amstrad Delta defconfig so far (just
> done a compile and boot so far), but did need the patch below to get
> omap-rtc to compile.
>
> Signed-Off-By: Jonathan McDowell <noodles@earth.li>
Looks right. In fact, that RTC should IMO be added to defconfig
for all the OMAP platforms ...
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-23 20:39 Git tree updated to 2.6.19-rc2 Tony Lindgren
` (2 preceding siblings ...)
2006-10-24 16:16 ` Git tree updated to 2.6.19-rc2 Dirk Behme
@ 2006-10-26 20:22 ` David Brownell
2006-10-27 12:53 ` tony
3 siblings, 1 reply; 14+ messages in thread
From: David Brownell @ 2006-10-26 20:22 UTC (permalink / raw)
To: linux-omap-open-source
I measured it at "rc3", myself ... :)
Here's an update to the musb/tusb code fixing, among other things,
compile glitches that have recently joined us. Like removing pt_regs
in all the IRQ paths, and a rename to <linux/usb/otg.h> ...
It's possible that (finally) removing the MIN_DMA_REQUEST thing would
make trouble; best way to test that is probably with g_file_storage.
If that fails, the obvious (temporary) workaround is disabling DMA.
- Dave
Various bugfixes:
- gadget side does dma_sync_single_for_*() if the buffer
was mapped by the gadget driver (none do that just yet)
- host side rx, always force dma request off "just in case",
instead of just for Mentor's DMA (i.e. not just OMAP2430)
- complain louder about the board needing different driver config
- iounmap() registers on rmmod
- fault handling fixes in tusb_start()
- (from TI) save dma mask so modprobe after use_dma=n can use dma
- (from TI) gadget side zero-length IN likes TXPKTRDY before status stage
Other updates:
- catch up to pt_regs finally leaving the irq path, other build fixes
- remove pointless headers like <linux/pci.h>
- RemoveMoreCamelCaseNastiness
- resolve some config-specific compiler warning/error messages
- dump tusb irq status register too
- remove that MIN_DMA thing; dma logic must now handle zlps
in all cases, not just to terminate a transfer
- comment fixes
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Index: h4/drivers/usb/musb/musbdefs.h
===================================================================
--- h4.orig/drivers/usb/musb/musbdefs.h 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/musbdefs.h 2006-10-26 04:16:50.000000000 -0700
@@ -43,7 +43,7 @@
#include <linux/usb_ch9.h>
#include <linux/usb_gadget.h>
#include <linux/usb.h>
-#include <linux/usb_otg.h>
+#include <linux/usb/otg.h>
#include <linux/usb/musb.h>
struct musb;
@@ -75,9 +75,6 @@ struct musb_ep;
#include "otg.h"
-/* REVISIT tune this */
-#define MIN_DMA_REQUEST 1 /* use PIO below this xfer size */
-
#ifdef CONFIG_USB_MUSB_OTG
@@ -374,7 +371,7 @@ static inline struct usb_request *next_o
struct musb {
spinlock_t Lock;
struct clk *clock;
- irqreturn_t (*isr)(int, void *, struct pt_regs *);
+ irqreturn_t (*isr)(int, void *);
struct work_struct irq_work;
#ifdef CONFIG_USB_MUSB_HDRC_HCD
@@ -418,7 +415,6 @@ struct musb {
u8 int_usb;
u16 int_rx;
u16 int_tx;
- struct pt_regs *int_regs;
struct otg_transceiver xceiv;
Index: h4/drivers/usb/musb/g_ep0.c
===================================================================
--- h4.orig/drivers/usb/musb/g_ep0.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/g_ep0.c 2006-10-25 22:28:31.000000000 -0700
@@ -556,9 +556,11 @@ musb_read_setup(struct musb *pThis, stru
*/
pThis->bSetAddress = FALSE;
pThis->ackpend = MGC_M_CSR0_P_SVDRXPKTRDY;
- if (req->wLength == 0)
+ if (req->wLength == 0) {
+ if (req->bRequestType & USB_DIR_IN)
+ pThis->ackpend |= MGC_M_CSR0_TXPKTRDY;
pThis->ep0_state = MGC_END0_STAGE_ACKWAIT;
- else if (req->bRequestType & USB_DIR_IN) {
+ } else if (req->bRequestType & USB_DIR_IN) {
pThis->ep0_state = MGC_END0_STAGE_TX;
musb_writew(regs, MGC_O_HDRC_CSR0, MGC_M_CSR0_P_SVDRXPKTRDY);
while ((musb_readw(regs, MGC_O_HDRC_CSR0)
Index: h4/drivers/usb/musb/musb_gadget.h
===================================================================
--- h4.orig/drivers/usb/musb/musb_gadget.h 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/musb_gadget.h 2006-10-25 22:28:31.000000000 -0700
@@ -74,6 +74,7 @@ struct musb_ep {
/* later things are modified based on usage */
struct list_head req_list;
+ /* true if lock must be dropped but req_list may not be advanced */
u8 busy;
};
Index: h4/drivers/usb/musb/musb_gadget.c
===================================================================
--- h4.orig/drivers/usb/musb/musb_gadget.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/musb_gadget.c 2006-10-25 22:28:31.000000000 -0700
@@ -118,15 +118,23 @@ __acquires(ep->musb->Lock)
ep->busy = 1;
spin_unlock(&musb->Lock);
- if (is_dma_capable() && req->mapped) {
- dma_unmap_single(musb->controller,
- req->request.dma,
- req->request.length,
- req->bTx
- ? DMA_TO_DEVICE
- : DMA_FROM_DEVICE);
- req->request.dma = DMA_ADDR_INVALID;
- req->mapped = 0;
+ if (is_dma_capable()) {
+ if (req->mapped) {
+ dma_unmap_single(musb->controller,
+ req->request.dma,
+ req->request.length,
+ req->bTx
+ ? DMA_TO_DEVICE
+ : DMA_FROM_DEVICE);
+ req->request.dma = DMA_ADDR_INVALID;
+ req->mapped = 0;
+ } else
+ dma_sync_single_for_cpu(musb->controller,
+ req->request.dma,
+ req->request.length,
+ req->bTx
+ ? DMA_TO_DEVICE
+ : DMA_FROM_DEVICE);
}
if (pRequest->status == 0)
DBG(5, "%s done request %p, %d/%d\n",
@@ -1135,7 +1143,7 @@ static int musb_gadget_queue(struct usb_
{
struct musb_ep *pEnd;
struct musb_request *pRequest;
- struct musb *pThis;
+ struct musb *musb;
int status = 0;
unsigned long lockflags;
@@ -1143,10 +1151,10 @@ static int musb_gadget_queue(struct usb_
return -EINVAL;
pEnd = to_musb_ep(ep);
- pThis = pEnd->pThis;
+ musb = pEnd->pThis;
pRequest = to_musb_request(req);
- pRequest->musb = pThis;
+ pRequest->musb = musb;
if (pRequest->ep != pEnd)
return -EINVAL;
@@ -1159,23 +1167,31 @@ static int musb_gadget_queue(struct usb_
pRequest->bEnd = pEnd->bEndNumber;
pRequest->bTx = pEnd->is_in;
- if (is_dma_capable()
- && pRequest->request.dma == DMA_ADDR_INVALID
- && pRequest->request.length >= MIN_DMA_REQUEST
- && pEnd->dma) {
- pRequest->request.dma = dma_map_single(pThis->controller,
- pRequest->request.buf,
- pRequest->request.length,
- pRequest->bTx
- ? DMA_TO_DEVICE
- : DMA_FROM_DEVICE);
- pRequest->mapped = 1;
+ if (is_dma_capable() && pEnd->dma) {
+ if (pRequest->request.dma == DMA_ADDR_INVALID) {
+ pRequest->request.dma = dma_map_single(
+ musb->controller,
+ pRequest->request.buf,
+ pRequest->request.length,
+ pRequest->bTx
+ ? DMA_TO_DEVICE
+ : DMA_FROM_DEVICE);
+ pRequest->mapped = 1;
+ } else {
+ dma_sync_single_for_device(musb->controller,
+ pRequest->request.dma,
+ pRequest->request.length,
+ pRequest->bTx
+ ? DMA_TO_DEVICE
+ : DMA_FROM_DEVICE);
+ pRequest->mapped = 0;
+ }
} else if (!req->buf) {
return -ENODATA;
} else
pRequest->mapped = 0;
- spin_lock_irqsave(&pThis->Lock, lockflags);
+ spin_lock_irqsave(&musb->Lock, lockflags);
/* don't queue if the ep is down */
if (!pEnd->desc) {
@@ -1190,10 +1206,10 @@ static int musb_gadget_queue(struct usb_
/* it this is the head of the queue, start i/o ... */
if (!pEnd->busy && &pRequest->request.list == pEnd->req_list.next)
- musb_ep_restart(pThis, pRequest);
+ musb_ep_restart(musb, pRequest);
cleanup:
- spin_unlock_irqrestore(&pThis->Lock, lockflags);
+ spin_unlock_irqrestore(&musb->Lock, lockflags);
return status;
}
Index: h4/drivers/usb/musb/musb_host.c
===================================================================
--- h4.orig/drivers/usb/musb/musb_host.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/musb_host.c 2006-10-26 04:16:36.000000000 -0700
@@ -33,7 +33,6 @@
******************************************************************/
#include <linux/module.h>
-#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/sched.h>
@@ -284,7 +283,7 @@ __acquires(musb->Lock)
);
spin_unlock(&musb->Lock);
- usb_hcd_giveback_urb(musb_to_hcd(musb), urb, musb->int_regs);
+ usb_hcd_giveback_urb(musb_to_hcd(musb), urb);
spin_lock(&musb->Lock);
}
@@ -1485,8 +1484,8 @@ void musb_host_rx(struct musb *pThis, u8
}
if (unlikely(dma_channel_status(dma) == MGC_DMA_STATUS_BUSY)) {
- /* SHOULD NEVER HAPPEN */
- ERR("RX%d dma busy\n", bEnd);
+ /* SHOULD NEVER HAPPEN ... but at least DaVinci has done it */
+ ERR("RX%d dma busy, csr %04x\n", bEnd, wRxCsrVal);
goto finish;
}
@@ -1521,9 +1520,15 @@ void musb_host_rx(struct musb *pThis, u8
}
#endif
if (dma && (wRxCsrVal & MGC_M_RXCSR_DMAENAB)) {
+ xfer_len = dma->dwActualLength;
+
+ wVal &= ~(MGC_M_RXCSR_DMAENAB
+ | MGC_M_RXCSR_H_AUTOREQ
+ | MGC_M_RXCSR_AUTOCLEAR
+ | MGC_M_RXCSR_RXPKTRDY);
+ musb_writew(pEnd->regs, MGC_O_HDRC_RXCSR, wVal);
#ifdef CONFIG_USB_INVENTRA_DMA
- xfer_len = dma->dwActualLength;
pUrb->actual_length += xfer_len;
qh->offset += xfer_len;
@@ -1531,14 +1536,6 @@ void musb_host_rx(struct musb *pThis, u8
bDone = (pUrb->actual_length >= pUrb->transfer_buffer_length)
|| (dma->dwActualLength & (qh->maxpacket - 1));
- wVal &= ~(MGC_M_RXCSR_DMAENAB
- | MGC_M_RXCSR_H_AUTOREQ
- | MGC_M_RXCSR_AUTOCLEAR
- | MGC_M_RXCSR_RXPKTRDY);
-
- MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
- MGC_WriteCsr16(pBase, MGC_O_HDRC_RXCSR, bEnd, wVal);
-
/* send IN token for next packet, without AUTOREQ */
if (!bDone) {
wVal |= MGC_M_RXCSR_H_REQPKT;
@@ -1552,7 +1549,6 @@ void musb_host_rx(struct musb *pThis, u8
MGC_ReadCsr16(pBase, MGC_O_HDRC_RXCOUNT, bEnd));
#else
bDone = TRUE;
- xfer_len = dma->dwActualLength;
#endif
} else if (pUrb->status == -EINPROGRESS) {
/* if no errors, be sure a packet is ready for unloading */
@@ -1682,7 +1678,7 @@ static int musb_schedule(
int idle;
int wBestDiff;
int nBestEnd, nEnd;
- struct musb_hw_ep *hw_ep;
+ struct musb_hw_ep *hw_ep = NULL;
struct list_head *head = NULL;
/* use fixed hardware for control and bulk */
Index: h4/drivers/usb/musb/plat_uds.c
===================================================================
--- h4.orig/drivers/usb/musb/plat_uds.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/plat_uds.c 2006-10-26 04:23:29.000000000 -0700
@@ -94,7 +94,6 @@
*/
#include <linux/module.h>
-#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/slab.h>
@@ -665,6 +664,7 @@ void musb_start(struct musb *musb)
musb_writeb(regs, MGC_O_HDRC_POWER, MGC_M_POWER_ISOUPDATE
| MGC_M_POWER_SOFTCONN
| MGC_M_POWER_HSENAB
+ /* ENSUSPEND wedges tusb */
// | MGC_M_POWER_ENSUSPEND
);
@@ -672,7 +672,7 @@ void musb_start(struct musb *musb)
devctl = musb_readb(regs, MGC_O_HDRC_DEVCTL);
devctl &= ~MGC_M_DEVCTL_SESSION;
- if (is_otg_enabled(pThis)) {
+ if (is_otg_enabled(musb)) {
/* session started after:
* (a) ID-grounded irq, host mode;
* (b) vbus present/connect IRQ, peripheral mode;
@@ -683,7 +683,7 @@ void musb_start(struct musb *musb)
else
devctl |= MGC_M_DEVCTL_SESSION;
- } else if (is_host_enabled(pThis)) {
+ } else if (is_host_enabled(musb)) {
/* assume ID pin is hard-wired to ground */
devctl |= MGC_M_DEVCTL_SESSION;
@@ -1276,7 +1276,7 @@ static int __devinit musb_core_init(u16
#ifdef CONFIG_ARCH_OMAP243X
-static irqreturn_t generic_interrupt(int irq, void *__hci, struct pt_regs *r)
+static irqreturn_t generic_interrupt(int irq, void *__hci)
{
unsigned long flags;
irqreturn_t retval = IRQ_NONE;
@@ -1287,7 +1287,6 @@ static irqreturn_t generic_interrupt(int
musb->int_usb = musb_readb(musb->pRegs, MGC_O_HDRC_INTRUSB);
musb->int_tx = musb_readw(musb->pRegs, MGC_O_HDRC_INTRTX);
musb->int_rx = musb_readw(musb->pRegs, MGC_O_HDRC_INTRRX);
- musb->int_regs = r;
if (musb->int_usb || musb->int_tx || musb->int_rx)
retval = musb_interrupt(musb);
@@ -1604,7 +1603,6 @@ static void musb_free(struct musb *musb)
if (is_dma_capable() && musb->pDmaController) {
struct dma_controller *c = musb->pDmaController;
-//
(void) c->stop(c->pPrivateData);
dma_controller_factory.destroy(c);
}
@@ -1667,7 +1665,7 @@ musb_init_controller(struct device *dev,
bad_config:
#endif
default:
- dev_dbg(dev, "incompatible Kconfig role setting\n");
+ dev_err(dev, "incompatible Kconfig role setting\n");
return -EINVAL;
}
@@ -1811,8 +1809,9 @@ fail:
INIT_WORK(&pThis->irq_work, musb_irq_work, pThis);
#ifdef CONFIG_SYSFS
- device_create_file(dev, &dev_attr_mode);
- device_create_file(dev, &dev_attr_cable);
+ status = device_create_file(dev, &dev_attr_mode);
+ status = device_create_file(dev, &dev_attr_cable);
+ status = 0;
#endif
return status;
@@ -1828,6 +1827,10 @@ fail2:
* bridge to a platform device; this driver then suffices.
*/
+#ifndef CONFIG_USB_INVENTRA_FIFO
+static u64 *orig_dma_mask;
+#endif
+
static int __devinit musb_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -1845,12 +1848,17 @@ static int __devinit musb_probe(struct p
return -ENOMEM;
}
+#ifndef CONFIG_USB_INVENTRA_FIFO
+ /* clobbered by use_dma=n */
+ orig_dma_mask = dev->dma_mask;
+#endif
return musb_init_controller(dev, irq, base);
}
static int __devexit musb_remove(struct platform_device *pdev)
{
struct musb *musb = dev_to_musb(&pdev->dev);
+ void __iomem *ctrl_base = musb->ctrl_base;
/* this gets called on rmmod.
* - Host mode: host may still be active
@@ -1864,7 +1872,11 @@ static int __devexit musb_remove(struct
usb_remove_hcd(musb_to_hcd(musb));
#endif
musb_free(musb);
+ iounmap(ctrl_base);
device_init_wakeup(&pdev->dev, 0);
+#ifndef CONFIG_USB_INVENTRA_FIFO
+ dev->dma_mask = orig_dma_mask;
+#endif
return 0;
}
Index: h4/drivers/usb/musb/musb_procfs.c
===================================================================
--- h4.orig/drivers/usb/musb/musb_procfs.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/musb_procfs.c 2006-10-25 22:28:31.000000000 -0700
@@ -558,7 +558,7 @@ static int dump_header_stats(struct musb
code = sprintf(buffer,
"TUSB6010: devconf %08x, phy enable %08x drive %08x"
"\n\totg %03x timer %08x"
- "\n\tprcm conf %08x mgmt %08x; intmask %08x"
+ "\n\tprcm conf %08x mgmt %08x; int src %08x mask %08x"
"\n",
musb_readl(pThis->ctrl_base, TUSB_DEV_CONF),
musb_readl(pThis->ctrl_base, TUSB_PHY_OTG_CTRL_ENABLE),
@@ -567,6 +567,7 @@ static int dump_header_stats(struct musb
musb_readl(pThis->ctrl_base, TUSB_DEV_OTG_TIMER),
musb_readl(pThis->ctrl_base, TUSB_PRCM_CONF),
musb_readl(pThis->ctrl_base, TUSB_PRCM_MNGMT),
+ musb_readl(pThis->ctrl_base, TUSB_INT_SRC),
musb_readl(pThis->ctrl_base, TUSB_INT_MASK));
if (code <= 0)
goto done;
Index: h4/drivers/usb/musb/tusb6010.c
===================================================================
--- h4.orig/drivers/usb/musb/tusb6010.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/tusb6010.c 2006-10-26 13:16:59.000000000 -0700
@@ -146,6 +146,7 @@ void musb_read_fifo(struct musb_hw_ep *h
* at most mA current to be drawn from VBUS during a Default-B session
* (that is, while VBUS exceeds 4.4V). In Default-A (including pure host
* mode), or low power Default-B sessions, something else supplies power.
+ * Caller must take care of locking.
*/
static int tusb_set_power(struct otg_transceiver *x, unsigned mA)
{
@@ -178,7 +179,7 @@ static int tusb_set_power(struct otg_tra
* (to be fixed in rev3 silicon) ... symptoms include disconnect
* or looping suspend/resume cycles
*/
-static void tusb_set_clock_source(struct musb *musb, int mode)
+static void tusb_set_clock_source(struct musb *musb, unsigned mode)
{
void __iomem *base = musb->ctrl_base;
u32 reg;
@@ -186,10 +187,17 @@ static void tusb_set_clock_source(struct
reg = musb_readl(base, TUSB_PRCM_CONF);
reg &= ~TUSB_PRCM_CONF_SYS_CLKSEL(0x3);
+ /* 0 = refclk (clkin, XI)
+ * 1 = PHY 60 MHz (internal PLL)
+ * 2 = not supported
+ * 3 = NOR clock (huh?)
+ */
if (mode > 0)
reg |= TUSB_PRCM_CONF_SYS_CLKSEL(mode & 0x3);
musb_writel(base, TUSB_PRCM_CONF, reg);
+
+ // FIXME tusb6010_platform_retime(mode == 0);
}
/*
@@ -477,7 +485,7 @@ tusb_otg_ints(struct musb *musb, u32 int
}
}
-static irqreturn_t tusb_interrupt(int irq, void *__hci, struct pt_regs *r)
+static irqreturn_t tusb_interrupt(int irq, void *__hci)
{
struct musb *musb = __hci;
void __iomem *base = musb->ctrl_base;
@@ -489,7 +497,6 @@ static irqreturn_t tusb_interrupt(int ir
int_src = musb_readl(base, TUSB_INT_SRC) & ~TUSB_INT_SRC_RESERVED_BITS;
DBG(3, "TUSB IRQ %08x\n", int_src);
- musb->int_regs = r;
musb->int_usb = (u8) int_src;
/* Acknowledge wake-up source interrupts */
@@ -570,7 +577,6 @@ static irqreturn_t tusb_interrupt(int ir
musb_writel(base, TUSB_INT_SRC_CLEAR,
int_src & ~TUSB_INT_MASK_RESERVED_BITS);
- musb->int_regs = NULL;
musb_platform_try_idle(musb);
spin_unlock_irqrestore(&musb->Lock, flags);
@@ -690,10 +696,10 @@ static int tusb_print_revision(struct mu
return TUSB_REV_MAJOR(musb_readl(base, TUSB_INT_CTRL_REV));
}
-static int tusb_start(struct musb *musb)
+static int __devinit tusb_start(struct musb *musb)
{
void __iomem *base = musb->ctrl_base;
- int ret = -1;
+ int ret = 0;
unsigned long flags;
u32 reg;
@@ -701,7 +707,7 @@ static int tusb_start(struct musb *musb)
ret = musb->board_set_power(1);
if (ret != 0) {
printk(KERN_ERR "tusb: Cannot enable TUSB6010\n");
- goto err;
+ return ret;
}
spin_lock_irqsave(&musb->Lock, flags);
@@ -752,6 +758,8 @@ static int tusb_start(struct musb *musb)
return 0;
err:
+ spin_unlock_irqrestore(&musb->Lock, flags);
+
if (musb->board_set_power)
musb->board_set_power(0);
Index: h4/drivers/usb/musb/omap2430.c
===================================================================
--- h4.orig/drivers/usb/musb/omap2430.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/omap2430.c 2006-10-25 22:28:31.000000000 -0700
@@ -21,7 +21,6 @@
*
*/
#include <linux/module.h>
-#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/slab.h>
@@ -29,9 +28,6 @@
#include <linux/list.h>
#include <linux/clk.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
#include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/arch/hardware.h>
Index: h4/drivers/usb/musb/davinci.c
===================================================================
--- h4.orig/drivers/usb/musb/davinci.c 2006-10-25 22:24:14.000000000 -0700
+++ h4/drivers/usb/musb/davinci.c 2006-10-26 04:18:04.000000000 -0700
@@ -22,7 +22,6 @@
*/
#include <linux/module.h>
-#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/slab.h>
@@ -246,7 +245,7 @@ static void davinci_set_vbus(struct musb
return davinci_vbus_power(musb, is_on, 0);
}
-static irqreturn_t davinci_interrupt(int irq, void *__hci, struct pt_regs *r)
+static irqreturn_t davinci_interrupt(int irq, void *__hci)
{
unsigned long flags;
irqreturn_t retval = IRQ_NONE;
@@ -289,7 +288,6 @@ static irqreturn_t davinci_interrupt(int
>> DAVINCI_USB_TXINT_SHIFT;
musb->int_usb = (tmp & DAVINCI_USB_USBINT_MASK)
>> DAVINCI_USB_USBINT_SHIFT;
- musb->int_regs = r;
/* treat DRVVBUS irq like an ID change IRQ (for now) */
if (tmp & (1 << (8 + DAVINCI_USB_USBINT_SHIFT))) {
@@ -317,7 +315,6 @@ static irqreturn_t davinci_interrupt(int
/* irq stays asserted until EOI is written */
musb_writel(tibase, DAVINCI_USB_EOI_REG, 0);
- musb->int_regs = NULL;
spin_unlock_irqrestore(&musb->Lock, flags);
/* REVISIT we sometimes get unhandled IRQs
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2)
2006-10-24 17:57 ` David Brownell
@ 2006-10-27 12:45 ` tony
0 siblings, 0 replies; 14+ messages in thread
From: tony @ 2006-10-27 12:45 UTC (permalink / raw)
To: David Brownell; +Cc: linux-omap-open-source
* David Brownell <david-b@pacbell.net> [061024 21:54]:
> On Tuesday 24 October 2006 4:05 am, Jonathan McDowell wrote:
>
> > Haven't hit any of these with the Amstrad Delta defconfig so far (just
> > done a compile and boot so far), but did need the patch below to get
> > omap-rtc to compile.
> >
> > Signed-Off-By: Jonathan McDowell <noodles@earth.li>
>
> Looks right. In fact, that RTC should IMO be added to defconfig
> for all the OMAP platforms ...
OK, I've pushed Jonathan's patch and also removed other unnecessary
pt_regs.
Some boards use external RTC, but I agree we should add it in general.
Tony
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-24 16:16 ` Git tree updated to 2.6.19-rc2 Dirk Behme
@ 2006-10-27 12:50 ` tony
2006-10-27 15:30 ` Dirk Behme
2006-10-29 22:09 ` Hiroshi DOYU
0 siblings, 2 replies; 14+ messages in thread
From: tony @ 2006-10-27 12:50 UTC (permalink / raw)
To: Dirk Behme, Toshihiro Kobayashi, Hiroshi DOYU; +Cc: linux-omap-open-source
* Dirk Behme <dirk.behme@googlemail.com> [061024 19:16]:
> Tony Lindgren wrote:
> >- CONFIG_DEBUG_LL hangs system
>
> For reference see
>
> http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008025.html
>
> and
>
> http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008054.html
>
> for an ugly workaround if you really need it. I really have
> no clue what is broken here.
Sounds like some clock is not enabled somewhere and serial write hangs.
> >- BUG in omap1_mbox_enable_irq
>
> I think you mean
>
> Unbalanced enable for IRQ 10
> BUG: warning at kernel/irq/manage.c:118/enable_irq()
>
> printed in bootmessages.
>
> I spent some minutes for this as well. It is MPU "dsp"
> interrupt which is enabled in omap1_mbox_enable_irq() by
>
> enable_irq(mbox->irq);
>
> In kernel/irq/manage.c function enable_irq() checks for
> desc->depth and if it is 0 it prints above message. Seems
> that desc->depth has to be >= 1.
>
> The comment tells us
>
> * Undoes the effect of one call to disable_irq(). If this
> * matches the last disable, processing of interrupts on this
> * IRQ line is re-enabled.
>
> so seems that before calling enable_irq() at least one
> disable_irq() is needed.
>
> I don't know if patch in attachment is a valid patch or only
> a workaround. What do you think?
>
> Best regards
>
> Dirk
>
> --- arch/arm/plat-omap/mailbox.c_orig 2006-10-24 18:08:06.000000000 +0200
> +++ arch/arm/plat-omap/mailbox.c 2006-10-24 18:10:58.000000000 +0200
> @@ -237,6 +237,7 @@ static int omap_mbox_init(struct omap_mb
> "failed to register mailbox interrupt:%d\n", ret);
> goto fail1;
> }
> + disable_mbox_irq(mbox, IRQ_RX);
> enable_mbox_irq(mbox, IRQ_RX);
>
> spin_lock_init(&mbox->lock);
>
Let's see what Toshihiro and Hiroshi think.
Tony
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-26 20:22 ` David Brownell
@ 2006-10-27 12:53 ` tony
0 siblings, 0 replies; 14+ messages in thread
From: tony @ 2006-10-27 12:53 UTC (permalink / raw)
To: David Brownell; +Cc: linux-omap-open-source
* David Brownell <david-b@pacbell.net> [061026 23:22]:
> I measured it at "rc3", myself ... :)
>
> Here's an update to the musb/tusb code fixing, among other things,
> compile glitches that have recently joined us. Like removing pt_regs
> in all the IRQ paths, and a rename to <linux/usb/otg.h> ...
>
> It's possible that (finally) removing the MIN_DMA_REQUEST thing would
> make trouble; best way to test that is probably with g_file_storage.
> If that fails, the obvious (temporary) workaround is disabling DMA.
>
> - Dave
>
>
> Various bugfixes:
> - gadget side does dma_sync_single_for_*() if the buffer
> was mapped by the gadget driver (none do that just yet)
> - host side rx, always force dma request off "just in case",
> instead of just for Mentor's DMA (i.e. not just OMAP2430)
> - complain louder about the board needing different driver config
> - iounmap() registers on rmmod
> - fault handling fixes in tusb_start()
> - (from TI) save dma mask so modprobe after use_dma=n can use dma
> - (from TI) gadget side zero-length IN likes TXPKTRDY before status stage
>
> Other updates:
> - catch up to pt_regs finally leaving the irq path, other build fixes
> - remove pointless headers like <linux/pci.h>
> - RemoveMoreCamelCaseNastiness
> - resolve some config-specific compiler warning/error messages
> - dump tusb irq status register too
> - remove that MIN_DMA thing; dma logic must now handle zlps
> in all cases, not just to terminate a transfer
> - comment fixes
Pushing today.
Tony
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-27 12:50 ` tony
@ 2006-10-27 15:30 ` Dirk Behme
2006-10-29 22:09 ` Hiroshi DOYU
1 sibling, 0 replies; 14+ messages in thread
From: Dirk Behme @ 2006-10-27 15:30 UTC (permalink / raw)
To: linux-omap-open-source
tony@atomide.com wrote:
> * Dirk Behme <dirk.behme@googlemail.com> [061024 19:16]:
>
>>Tony Lindgren wrote:
>>
>>>- CONFIG_DEBUG_LL hangs system
>>
>>For reference see
>>
>>http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008025.html
>>
>>and
>>
>>http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008054.html
>>
>>for an ugly workaround if you really need it. I really have
>>no clue what is broken here.
>
>
> Sounds like some clock is not enabled somewhere and serial write hangs.
Good idea! I think we had some clock rework meanwhile. Maybe
we have to move a clock enable to some earlier point if
using CONFIG_DEBUG_LL. Any idea which clock is worth looking at?
Best regards
Dirk
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: omap-keypad issues with 2.6.19-rc?
2006-10-24 11:05 ` [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2) Jonathan McDowell
2006-10-24 17:57 ` David Brownell
@ 2006-10-27 16:16 ` Jonathan McDowell
2006-10-27 16:49 ` [PATCH] ARM: OMAP: Fix Amstrad Delta omap-keypad usage Jonathan McDowell
1 sibling, 1 reply; 14+ messages in thread
From: Jonathan McDowell @ 2006-10-27 16:16 UTC (permalink / raw)
To: linux-omap-open-source
On Tue, Oct 24, 2006 at 12:05:02PM +0100, Jonathan McDowell wrote:
> On Mon, Oct 23, 2006 at 11:39:26PM +0300, Tony Lindgren wrote:
> > I've updated our git tree to 2.6.19-rc2. At least following have
> > problems on omap1 (OSK):
> >
> > - CONFIG_DEBUG_LL hangs system
> > - BUG in omap1_mbox_enable_irq
> > - Aic23 NULL pointer exception
> >
> > So YMMV :) Anybody got patches for these issues already?
>
> Haven't hit any of these with the Amstrad Delta defconfig so far (just
> done a compile and boot so far),
However having prodded further I'm seeing incorrect key parsing with
the omap-keypad driver under both -rc2 and -rc3 (works fine in
2.6.18-omap1). Numerous keys now returns strings of characters rather
than the single expected character. A few keys still work as expected
however. Before I dig in further is anyone else seeing anything similar?
J.
--
After a number of decimal places, | Black Cat Networks Ltd
nobody gives a damn. | http://www.blackcatnetworks.co.uk/
| UK Web, domain and email hosting
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] ARM: OMAP: Fix Amstrad Delta omap-keypad usage.
2006-10-27 16:16 ` omap-keypad issues with 2.6.19-rc? Jonathan McDowell
@ 2006-10-27 16:49 ` Jonathan McDowell
0 siblings, 0 replies; 14+ messages in thread
From: Jonathan McDowell @ 2006-10-27 16:49 UTC (permalink / raw)
To: linux-omap-open-source
On Fri, Oct 27, 2006 at 05:16:59PM +0100, Jonathan McDowell wrote:
> However having prodded further I'm seeing incorrect key parsing with
> the omap-keypad driver under both -rc2 and -rc3 (works fine in
> 2.6.18-omap1). Numerous keys now returns strings of characters rather
> than the single expected character. A few keys still work as expected
> however. Before I dig in further is anyone else seeing anything similar?
This appears to be due to the addition of keymapsize to the
omap_kp_platform_data structure. The patch below fixes things up for
the Delta; other boards appear to have already had this done.
Signed-Off-By: Jonathan McDowell <noodles@earth.li>
-----
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
index 0a0c06f..c73ca61 100644
--- a/arch/arm/mach-omap1/board-ams-delta.c
+++ b/arch/arm/mach-omap1/board-ams-delta.c
@@ -187,10 +187,11 @@ static struct resource ams_delta_kp_reso
};
static struct omap_kp_platform_data ams_delta_kp_data = {
- .rows = 8,
- .cols = 8,
- .keymap = ams_delta_keymap,
- .rep = 1,
+ .rows = 8,
+ .cols = 8,
+ .keymap = ams_delta_keymap,
+ .keymapsize = ARRAY_SIZE(ams_delta_keymap),
+ .delay = 9,
};
static struct platform_device ams_delta_kp_device = {
-----
J.
--
101 things you can't have too | .''`. Debian GNU/Linux Developer
much of : 9 - Processing power. | : :' : Happy to accept PGP signed
| `. `' or encrypted mail - RSA +
| `- DSA keys on the keyservers.
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Aic23 NULL pointer exception, was: Git tree updated to 2.6.19-rc2
2006-10-24 7:53 ` Komal Shah
@ 2006-10-28 6:31 ` Dirk Behme
0 siblings, 0 replies; 14+ messages in thread
From: Dirk Behme @ 2006-10-28 6:31 UTC (permalink / raw)
To: Komal Shah, linux-omap-open-source
Komal Shah wrote:
>>- Aic23 NULL pointer exception
>
> Anything related to as discussed on davinci mailing list for I2C?
Oops is
Unable to handle kernel NULL pointer dereference at virtual
address 00000004
PC is at i2c_smbus_write_byte_data+0x10/0x50
LR is at aic23_write_value+0x40/0x50
> http://linux.omap.com/pipermail/davinci-linux-open-source/2006-October/001312.html
I think this is the same?
> If that is the case, then please try adding zero-length transaction and
> SMBUS_QUICK code as temporary hack.
Anywhere a (hackish) patch for this available? Would be nice
to have sound working again, even if a hack, until clean
solution is available.
Best regards
Dirk
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Git tree updated to 2.6.19-rc2
2006-10-27 12:50 ` tony
2006-10-27 15:30 ` Dirk Behme
@ 2006-10-29 22:09 ` Hiroshi DOYU
1 sibling, 0 replies; 14+ messages in thread
From: Hiroshi DOYU @ 2006-10-29 22:09 UTC (permalink / raw)
To: tony; +Cc: linux-omap-open-source
From: "ext tony@atomide.com" <tony@atomide.com>
Subject: Re: Git tree updated to 2.6.19-rc2
Date: Fri, 27 Oct 2006 15:50:17 +0300
> * Dirk Behme <dirk.behme@googlemail.com> [061024 19:16]:
> > Tony Lindgren wrote:
> > >- CONFIG_DEBUG_LL hangs system
> >
> > For reference see
> >
> > http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008025.html
> >
> > and
> >
> > http://linux.omap.com/pipermail/linux-omap-open-source/2006-October/008054.html
> >
> > for an ugly workaround if you really need it. I really have
> > no clue what is broken here.
>
> Sounds like some clock is not enabled somewhere and serial write hangs.
>
> > >- BUG in omap1_mbox_enable_irq
> >
> > I think you mean
> >
> > Unbalanced enable for IRQ 10
> > BUG: warning at kernel/irq/manage.c:118/enable_irq()
> >
> > printed in bootmessages.
> >
> > I spent some minutes for this as well. It is MPU "dsp"
> > interrupt which is enabled in omap1_mbox_enable_irq() by
> >
> > enable_irq(mbox->irq);
> >
> > In kernel/irq/manage.c function enable_irq() checks for
> > desc->depth and if it is 0 it prints above message. Seems
> > that desc->depth has to be >= 1.
> >
> > The comment tells us
> >
> > * Undoes the effect of one call to disable_irq(). If this
> > * matches the last disable, processing of interrupts on this
> > * IRQ line is re-enabled.
> >
> > so seems that before calling enable_irq() at least one
> > disable_irq() is needed.
> >
> > I don't know if patch in attachment is a valid patch or only
> > a workaround. What do you think?
> >
> > Best regards
> >
> > Dirk
> >
>
> > --- arch/arm/plat-omap/mailbox.c_orig 2006-10-24 18:08:06.000000000 +0200
> > +++ arch/arm/plat-omap/mailbox.c 2006-10-24 18:10:58.000000000 +0200
> > @@ -237,6 +237,7 @@ static int omap_mbox_init(struct omap_mb
> > "failed to register mailbox interrupt:%d\n", ret);
> > goto fail1;
> > }
> > + disable_mbox_irq(mbox, IRQ_RX);
> > enable_mbox_irq(mbox, IRQ_RX);
> >
> > spin_lock_init(&mbox->lock);
> >
>
> Let's see what Toshihiro and Hiroshi think.
I guess that the above should work for now but I think that there's
another way, for example, I can have initialization flag in
enable_mbox_irq() in omap1, though I am sure that there's better way.
Hiroshi DOYU
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2006-10-29 22:09 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-23 20:39 Git tree updated to 2.6.19-rc2 Tony Lindgren
2006-10-24 7:53 ` Komal Shah
2006-10-28 6:31 ` Aic23 NULL pointer exception, was: " Dirk Behme
2006-10-24 11:05 ` [PATCH] ARM: OMAP: Fixup omap-rtc (was: Git tree updated to 2.6.19-rc2) Jonathan McDowell
2006-10-24 17:57 ` David Brownell
2006-10-27 12:45 ` tony
2006-10-27 16:16 ` omap-keypad issues with 2.6.19-rc? Jonathan McDowell
2006-10-27 16:49 ` [PATCH] ARM: OMAP: Fix Amstrad Delta omap-keypad usage Jonathan McDowell
2006-10-24 16:16 ` Git tree updated to 2.6.19-rc2 Dirk Behme
2006-10-27 12:50 ` tony
2006-10-27 15:30 ` Dirk Behme
2006-10-29 22:09 ` Hiroshi DOYU
2006-10-26 20:22 ` David Brownell
2006-10-27 12:53 ` tony
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox