* [PATCH 16/21]: powerpc/cell spidernet
From: Linas Vepstas @ 2006-10-10 21:15 UTC (permalink / raw)
To: akpm; +Cc: jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010204946.GW4381@austin.ibm.com>
Remove a dummy register read that is not needed.
This reduces CPU usage notably during transmit.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: James K Lewis <jklewis@us.ibm.com>
----
drivers/net/spider_net.c | 2 --
1 file changed, 2 deletions(-)
Index: linux-2.6.18-mm2/drivers/net/spider_net.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.c 2006-10-10 13:20:08.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.c 2006-10-10 13:21:41.000000000 -0500
@@ -759,8 +759,6 @@ spider_net_release_tx_chain(struct spide
unsigned long flags;
int status;
- spider_net_read_reg(card, SPIDER_NET_GDTDMACCNTR);
-
while (chain->tail != chain->head) {
spin_lock_irqsave(&chain->lock, flags);
descr = chain->tail;
^ permalink raw reply
* [PATCH 17/21]: powerpc/cell spidernet reduce DMA kicking
From: Linas Vepstas @ 2006-10-10 21:18 UTC (permalink / raw)
To: akpm; +Cc: jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010204946.GW4381@austin.ibm.com>
The current code attempts to start the TX dma every time a packet
is queued. This is too conservative, and wastes CPU time. This
patch changes behaviour to call the kick-dma function less often,
only when the tx queue is at risk of emptying.
This reduces cpu usage, improves performance.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
----
drivers/net/spider_net.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
Index: linux-2.6.18-mm2/drivers/net/spider_net.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.c 2006-10-10 13:21:41.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.c 2006-10-10 13:28:43.000000000 -0500
@@ -698,7 +698,7 @@ spider_net_prepare_tx_descr(struct spide
return 0;
}
-static void
+static int
spider_net_set_low_watermark(struct spider_net_card *card)
{
unsigned long flags;
@@ -719,7 +719,7 @@ spider_net_set_low_watermark(struct spid
/* If TX queue is short, don't even bother with interrupts */
if (cnt < card->tx_desc/4)
- return;
+ return cnt;
/* Set low-watermark 3/4th's of the way into the queue. */
descr = card->tx_chain.tail;
@@ -735,6 +735,7 @@ spider_net_set_low_watermark(struct spid
card->low_watermark->dmac_cmd_status & ~SPIDER_NET_DESCR_TXDESFLG;
card->low_watermark = descr;
spin_unlock_irqrestore(&card->tx_chain.lock, flags);
+ return cnt;
}
/**
@@ -819,8 +820,12 @@ spider_net_release_tx_chain(struct spide
* @card: card structure
* @descr: descriptor address to enable TX processing at
*
- * spider_net_kick_tx_dma writes the current tx chain head as start address
- * of the tx descriptor chain and enables the transmission DMA engine
+ * This routine will start the transmit DMA running if
+ * it is not already running. This routine ned only be
+ * called when queueing a new packet to an empty tx queue.
+ * Writes the current tx chain head as start address
+ * of the tx descriptor chain and enables the transmission
+ * DMA engine.
*/
static inline void
spider_net_kick_tx_dma(struct spider_net_card *card)
@@ -860,6 +865,7 @@ out:
static int
spider_net_xmit(struct sk_buff *skb, struct net_device *netdev)
{
+ int cnt;
struct spider_net_card *card = netdev_priv(netdev);
struct spider_net_descr_chain *chain = &card->tx_chain;
@@ -873,8 +879,9 @@ spider_net_xmit(struct sk_buff *skb, str
return NETDEV_TX_BUSY;
}
- spider_net_set_low_watermark(card);
- spider_net_kick_tx_dma(card);
+ cnt = spider_net_set_low_watermark(card);
+ if (cnt < 5)
+ spider_net_kick_tx_dma(card);
return NETDEV_TX_OK;
}
^ permalink raw reply
* [PATCH 18/21]: powerpc/cell spidernet variable name change
From: Linas Vepstas @ 2006-10-10 21:19 UTC (permalink / raw)
To: akpm; +Cc: jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010204946.GW4381@austin.ibm.com>
Cosmetic patch: give the variable holding the numer of descriptors
a more descriptive name, so to avoid confusion.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
----
drivers/net/spider_net.c | 12 ++++++------
drivers/net/spider_net.h | 4 ++--
drivers/net/spider_net_ethtool.c | 4 ++--
3 files changed, 10 insertions(+), 10 deletions(-)
Index: linux-2.6.18-mm2/drivers/net/spider_net.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.c 2006-10-10 13:28:43.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.c 2006-10-10 13:35:33.000000000 -0500
@@ -718,7 +718,7 @@ spider_net_set_low_watermark(struct spid
}
/* If TX queue is short, don't even bother with interrupts */
- if (cnt < card->tx_desc/4)
+ if (cnt < card->num_tx_desc/4)
return cnt;
/* Set low-watermark 3/4th's of the way into the queue. */
@@ -1666,15 +1666,15 @@ spider_net_open(struct net_device *netde
result = -ENOMEM;
if (spider_net_init_chain(card, &card->tx_chain, card->descr,
- PCI_DMA_TODEVICE, card->tx_desc))
+ PCI_DMA_TODEVICE, card->num_tx_desc))
goto alloc_tx_failed;
card->low_watermark = NULL;
/* rx_chain is after tx_chain, so offset is descr + tx_count */
if (spider_net_init_chain(card, &card->rx_chain,
- card->descr + card->tx_desc,
- PCI_DMA_FROMDEVICE, card->rx_desc))
+ card->descr + card->num_tx_desc,
+ PCI_DMA_FROMDEVICE, card->num_rx_desc))
goto alloc_rx_failed;
/* allocate rx skbs */
@@ -2060,8 +2060,8 @@ spider_net_setup_netdev(struct spider_ne
card->options.rx_csum = SPIDER_NET_RX_CSUM_DEFAULT;
- card->tx_desc = tx_descriptors;
- card->rx_desc = rx_descriptors;
+ card->num_tx_desc = tx_descriptors;
+ card->num_rx_desc = rx_descriptors;
spider_net_setup_netdev_ops(netdev);
Index: linux-2.6.18-mm2/drivers/net/spider_net.h
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.h 2006-10-10 13:09:27.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.h 2006-10-10 13:35:33.000000000 -0500
@@ -455,8 +455,8 @@ struct spider_net_card {
/* for ethtool */
int msg_enable;
- int rx_desc;
- int tx_desc;
+ int num_rx_desc;
+ int num_tx_desc;
struct spider_net_extra_stats spider_stats;
struct spider_net_descr descr[0];
Index: linux-2.6.18-mm2/drivers/net/spider_net_ethtool.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net_ethtool.c 2006-10-10 12:20:05.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net_ethtool.c 2006-10-10 13:35:33.000000000 -0500
@@ -158,9 +158,9 @@ spider_net_ethtool_get_ringparam(struct
struct spider_net_card *card = netdev->priv;
ering->tx_max_pending = SPIDER_NET_TX_DESCRIPTORS_MAX;
- ering->tx_pending = card->tx_desc;
+ ering->tx_pending = card->num_tx_desc;
ering->rx_max_pending = SPIDER_NET_RX_DESCRIPTORS_MAX;
- ering->rx_pending = card->rx_desc;
+ ering->rx_pending = card->num_rx_desc;
}
static int spider_net_get_stats_count(struct net_device *netdev)
^ permalink raw reply
* [PATCH 19/21]: powerpc/cell spidernet DMA direction fix
From: Linas Vepstas @ 2006-10-10 21:21 UTC (permalink / raw)
To: akpm; +Cc: jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010204946.GW4381@austin.ibm.com>
The ring buffer descriptors are DMA-accessed bidirectionally,
but are not declared in this way. Fix this.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
----
drivers/net/spider_net.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
Index: linux-2.6.18-mm2/drivers/net/spider_net.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.c 2006-10-10 13:35:33.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.c 2006-10-10 13:37:40.000000000 -0500
@@ -301,7 +301,7 @@ static int
spider_net_init_chain(struct spider_net_card *card,
struct spider_net_descr_chain *chain,
struct spider_net_descr *start_descr,
- int direction, int no)
+ int no)
{
int i;
struct spider_net_descr *descr;
@@ -316,7 +316,7 @@ spider_net_init_chain(struct spider_net_
buf = pci_map_single(card->pdev, descr,
SPIDER_NET_DESCR_SIZE,
- direction);
+ PCI_DMA_BIDIRECTIONAL);
if (pci_dma_mapping_error(buf))
goto iommu_error;
@@ -330,11 +330,6 @@ spider_net_init_chain(struct spider_net_
(descr-1)->next = start_descr;
start_descr->prev = descr-1;
- descr = start_descr;
- if (direction == PCI_DMA_FROMDEVICE)
- for (i=0; i < no; i++, descr++)
- descr->next_descr_addr = descr->next->bus_addr;
-
spin_lock_init(&chain->lock);
chain->head = start_descr;
chain->tail = start_descr;
@@ -347,7 +342,7 @@ iommu_error:
if (descr->bus_addr)
pci_unmap_single(card->pdev, descr->bus_addr,
SPIDER_NET_DESCR_SIZE,
- direction);
+ PCI_DMA_BIDIRECTIONAL);
return -ENOMEM;
}
@@ -368,7 +363,7 @@ spider_net_free_rx_chain_contents(struct
dev_kfree_skb(descr->skb);
pci_unmap_single(card->pdev, descr->buf_addr,
SPIDER_NET_MAX_FRAME,
- PCI_DMA_FROMDEVICE);
+ PCI_DMA_BIDIRECTIONAL);
}
descr = descr->next;
}
@@ -1662,21 +1657,26 @@ int
spider_net_open(struct net_device *netdev)
{
struct spider_net_card *card = netdev_priv(netdev);
- int result;
+ struct spider_net_descr *descr;
+ int i, result;
result = -ENOMEM;
if (spider_net_init_chain(card, &card->tx_chain, card->descr,
- PCI_DMA_TODEVICE, card->num_tx_desc))
+ card->num_tx_desc))
goto alloc_tx_failed;
card->low_watermark = NULL;
/* rx_chain is after tx_chain, so offset is descr + tx_count */
if (spider_net_init_chain(card, &card->rx_chain,
- card->descr + card->num_tx_desc,
- PCI_DMA_FROMDEVICE, card->num_rx_desc))
+ card->descr + card->num_tx_desc,
+ card->num_rx_desc))
goto alloc_rx_failed;
+ descr = card->rx_chain.head;
+ for (i=0; i < card->num_rx_desc; i++, descr++)
+ descr->next_descr_addr = descr->next->bus_addr;
+
/* allocate rx skbs */
if (spider_net_alloc_rx_skbs(card))
goto alloc_skbs_failed;
^ permalink raw reply
* [PATCH 20/21]: powerpc/cell spidernet release all descrs
From: Linas Vepstas @ 2006-10-10 21:22 UTC (permalink / raw)
To: akpm; +Cc: jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010204946.GW4381@austin.ibm.com>
Bugfix: rx descriptor release function fails to visit
the last entry while walking receive descriptor ring.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
----
drivers/net/spider_net.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: linux-2.6.18-mm2/drivers/net/spider_net.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.c 2006-10-10 13:37:40.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.c 2006-10-10 13:40:56.000000000 -0500
@@ -358,7 +358,7 @@ spider_net_free_rx_chain_contents(struct
struct spider_net_descr *descr;
descr = card->rx_chain.head;
- while (descr->next != card->rx_chain.head) {
+ do {
if (descr->skb) {
dev_kfree_skb(descr->skb);
pci_unmap_single(card->pdev, descr->buf_addr,
@@ -366,7 +366,7 @@ spider_net_free_rx_chain_contents(struct
PCI_DMA_BIDIRECTIONAL);
}
descr = descr->next;
- }
+ } while (descr != card->rx_chain.head);
}
/**
^ permalink raw reply
* [PATCH 21/21]: powerpc/cell spidernet DMA coalescing
From: Linas Vepstas @ 2006-10-10 21:23 UTC (permalink / raw)
To: akpm; +Cc: jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010204946.GW4381@austin.ibm.com>
The current driver code performs 512 DMA mappns of a bunch of
32-byte structures. This is silly, as they are all in contiguous
memory. Ths patch changes the code to DMA map the entie area
with just one call.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
----
drivers/net/spider_net.c | 107 +++++++++++++++++++++++------------------------
drivers/net/spider_net.h | 16 ++-----
2 files changed, 59 insertions(+), 64 deletions(-)
Index: linux-2.6.18-mm2/drivers/net/spider_net.c
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.c 2006-10-10 13:40:56.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.c 2006-10-10 13:42:12.000000000 -0500
@@ -267,25 +267,6 @@ spider_net_get_descr_status(struct spide
}
/**
- * spider_net_free_chain - free descriptor chain
- * @card: card structure
- * @chain: address of chain
- *
- */
-static void
-spider_net_free_chain(struct spider_net_card *card,
- struct spider_net_descr_chain *chain)
-{
- struct spider_net_descr *descr;
-
- for (descr = chain->tail; !descr->bus_addr; descr = descr->next) {
- pci_unmap_single(card->pdev, descr->bus_addr,
- SPIDER_NET_DESCR_SIZE, PCI_DMA_BIDIRECTIONAL);
- descr->bus_addr = 0;
- }
-}
-
-/**
* spider_net_init_chain - links descriptor chain
* @card: card structure
* @chain: address of chain
@@ -297,15 +278,15 @@ spider_net_free_chain(struct spider_net_
*
* returns 0 on success, <0 on failure
*/
-static int
+static void
spider_net_init_chain(struct spider_net_card *card,
struct spider_net_descr_chain *chain,
struct spider_net_descr *start_descr,
+ dma_addr_t buf,
int no)
{
int i;
struct spider_net_descr *descr;
- dma_addr_t buf;
descr = start_descr;
memset(descr, 0, sizeof(*descr) * no);
@@ -314,17 +295,12 @@ spider_net_init_chain(struct spider_net_
for (i=0; i<no; i++, descr++) {
descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE;
- buf = pci_map_single(card->pdev, descr,
- SPIDER_NET_DESCR_SIZE,
- PCI_DMA_BIDIRECTIONAL);
-
- if (pci_dma_mapping_error(buf))
- goto iommu_error;
-
descr->bus_addr = buf;
+ descr->next_descr_addr = 0;
descr->next = descr + 1;
descr->prev = descr - 1;
+ buf += sizeof(struct spider_net_descr);
}
/* do actual circular list */
(descr-1)->next = start_descr;
@@ -333,17 +309,6 @@ spider_net_init_chain(struct spider_net_
spin_lock_init(&chain->lock);
chain->head = start_descr;
chain->tail = start_descr;
-
- return 0;
-
-iommu_error:
- descr = start_descr;
- for (i=0; i < no; i++, descr++)
- if (descr->bus_addr)
- pci_unmap_single(card->pdev, descr->bus_addr,
- SPIDER_NET_DESCR_SIZE,
- PCI_DMA_BIDIRECTIONAL);
- return -ENOMEM;
}
/**
@@ -1658,24 +1623,32 @@ spider_net_open(struct net_device *netde
{
struct spider_net_card *card = netdev_priv(netdev);
struct spider_net_descr *descr;
- int i, result;
+ int result = -ENOMEM;
- result = -ENOMEM;
- if (spider_net_init_chain(card, &card->tx_chain, card->descr,
- card->num_tx_desc))
- goto alloc_tx_failed;
+ card->descr_dma_addr = pci_map_single(card->pdev, card->descr,
+ (card->num_tx_desc+card->num_rx_desc)*sizeof(struct spider_net_descr),
+ PCI_DMA_BIDIRECTIONAL);
+ if (pci_dma_mapping_error(card->descr_dma_addr))
+ return -ENOMEM;
+
+ spider_net_init_chain(card, &card->tx_chain, card->descr,
+ card->descr_dma_addr,
+ card->num_tx_desc);
card->low_watermark = NULL;
/* rx_chain is after tx_chain, so offset is descr + tx_count */
- if (spider_net_init_chain(card, &card->rx_chain,
+ spider_net_init_chain(card, &card->rx_chain,
card->descr + card->num_tx_desc,
- card->num_rx_desc))
- goto alloc_rx_failed;
+ card->descr_dma_addr
+ + card->num_tx_desc * sizeof(struct spider_net_descr),
+ card->num_rx_desc);
descr = card->rx_chain.head;
- for (i=0; i < card->num_rx_desc; i++, descr++)
+ do {
descr->next_descr_addr = descr->next->bus_addr;
+ descr = descr->next;
+ } while (descr != card->rx_chain.head);
/* allocate rx skbs */
if (spider_net_alloc_rx_skbs(card))
@@ -1701,10 +1674,21 @@ spider_net_open(struct net_device *netde
register_int_failed:
spider_net_free_rx_chain_contents(card);
alloc_skbs_failed:
- spider_net_free_chain(card, &card->rx_chain);
-alloc_rx_failed:
- spider_net_free_chain(card, &card->tx_chain);
-alloc_tx_failed:
+ descr = card->rx_chain.head;
+ do {
+ descr->bus_addr = 0;
+ descr = descr->next;
+ } while (descr != card->rx_chain.head);
+
+ descr = card->tx_chain.head;
+ do {
+ descr->bus_addr = 0;
+ descr = descr->next;
+ } while (descr != card->tx_chain.head);
+
+ pci_unmap_single(card->pdev, card->descr_dma_addr,
+ (card->num_tx_desc+card->num_rx_desc)*sizeof(struct spider_net_descr),
+ PCI_DMA_BIDIRECTIONAL);
return result;
}
@@ -1907,6 +1891,7 @@ int
spider_net_stop(struct net_device *netdev)
{
struct spider_net_card *card = netdev_priv(netdev);
+ struct spider_net_descr *descr;
tasklet_kill(&card->rxram_full_tl);
netif_poll_disable(netdev);
@@ -1930,9 +1915,23 @@ spider_net_stop(struct net_device *netde
/* release chains */
spider_net_release_tx_chain(card, 1);
+ spider_net_free_rx_chain_contents(card);
+
+ descr = card->rx_chain.head;
+ do {
+ descr->bus_addr = 0;
+ descr = descr->next;
+ } while (descr != card->rx_chain.head);
+
+ descr = card->tx_chain.head;
+ do {
+ descr->bus_addr = 0;
+ descr = descr->next;
+ } while (descr != card->tx_chain.head);
- spider_net_free_chain(card, &card->tx_chain);
- spider_net_free_chain(card, &card->rx_chain);
+ pci_unmap_single(card->pdev, card->descr_dma_addr,
+ (card->num_tx_desc+card->num_rx_desc)*sizeof(struct spider_net_descr),
+ PCI_DMA_BIDIRECTIONAL);
return 0;
}
Index: linux-2.6.18-mm2/drivers/net/spider_net.h
===================================================================
--- linux-2.6.18-mm2.orig/drivers/net/spider_net.h 2006-10-10 13:35:33.000000000 -0500
+++ linux-2.6.18-mm2/drivers/net/spider_net.h 2006-10-10 13:42:12.000000000 -0500
@@ -397,8 +397,6 @@ struct spider_net_descr_chain {
* 701b8000 would be correct, but every packets gets that flag */
#define SPIDER_NET_DESTROY_RX_FLAGS 0x700b8000
-#define SPIDER_NET_DESCR_SIZE 32
-
/* this will be bigger some time */
struct spider_net_options {
int rx_csum; /* for rx: if 0 ip_summed=NONE,
@@ -437,28 +435,26 @@ struct spider_net_card {
void __iomem *regs;
+ int num_rx_desc;
+ int num_tx_desc;
struct spider_net_descr_chain tx_chain;
struct spider_net_descr_chain rx_chain;
struct spider_net_descr *low_watermark;
+ dma_addr_t descr_dma_addr;
- struct net_device_stats netdev_stats;
-
- struct spider_net_options options;
-
- spinlock_t intmask_lock;
struct tasklet_struct rxram_full_tl;
struct timer_list tx_timer;
-
struct work_struct tx_timeout_task;
atomic_t tx_timeout_task_counter;
wait_queue_head_t waitq;
/* for ethtool */
int msg_enable;
- int num_rx_desc;
- int num_tx_desc;
+ struct net_device_stats netdev_stats;
struct spider_net_extra_stats spider_stats;
+ struct spider_net_options options;
+ /* Must be last element in the structure */
struct spider_net_descr descr[0];
};
^ permalink raw reply
* Re: [PATCH] Xilinx UART Lite 2.6.18 driver
From: Grant Likely @ 2006-10-10 22:04 UTC (permalink / raw)
To: David Bolcsfoldi; +Cc: linuxppc-embedded
In-Reply-To: <609d5c8e0610101349w64cdd4ecjc5359ad8d1f5d635@mail.gmail.com>
On 10/10/06, David Bolcsfoldi <dbolcsfoldi@gmail.com> wrote:
> Hi,
>
> here's a set of patches that adds support for Xilinx UART lite
> devices. It has been tested on an ML403-FX using xapp902
> (ml403_ppc_plb_temac) using a 2.6.18 kernel and a BusyBox userspace.
>
> This is my first patch for the Linux kernel, so please be gentle :-)
Okay; here goes. :)
First off; it is easiest to review patches when they are sent inline,
one per email. When they are attachements, they have to be extracted
and copied back into an email to comment on them. Also, most of the
patches here are pretty minor. You can roll all of them up into a
single patch (or two if you want to separate the boot wrapper driver
and the full driver)
Other generic comments:
- Try to keep lines under 80 character long.
xuartlite_tty.c.patch: These changes look pretty good
misc-common.c.patch: ok
virtex.h.patch: ok
xilinx_ml403.c.patch: ok
serial_core.h: ok
virtex.c.patch:
> --- 2.6.18/arch/ppc/platforms/4xx/virtex.c 2006-10-04 14:31:15.000000000 -0700
> +++ patched/arch/ppc/platforms/4xx/virtex.c 2006-10-07 11:21:18.000000000 -0700
> @@ -52,5 +52,10 @@
> .id = 0,
> .dev.platform_data = serial_platform_data,
> },
> +
> + [VIRTEX_XUL_UART] = {
> + .name = "xul_uart",
> + .id = 0,
> + },
> };
You need to add a pointer to a table of available UartLites her.
Include base addresses/irq# in the table. There is no point adding
something to the platform bus if you don't describe the devices that
are available. Use the .dev.platform_data value. It's a void*
pointer available for your driver.
xuartlite.c.patch:
> diff -urN 2.6.18/drivers/serial/xuartlite.c patched/drivers/serial/xuartlite.c
> --- 2.6.18/drivers/serial/xuartlite.c 1969-12-31 16:00:00.000000000 -0800
> +++ patched/drivers/serial/xuartlite.c 2006-10-10 11:08:08.000000000 -0700
> @@ -0,0 +1,723 @@
<snip>
> +
> +#include <asm/delay.h>
> +#include <asm/io.h>
> +#include <platforms/4xx/xparameters/xparameters.h>
I'd like to move away from drivers including xparameters.h. We're
moving towards using the flattened device tree to populate the
platform bus for xilinx devices. arch/ppc doesn't use the device
tree, but it does populate the platform bus. Device drivers should
get base addresses, irqs, etc from the platform bus instead of
xparams.
> +
> +#if defined(CONFIG_SERIAL_XUL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
> +#define SUPPORT_SYSRQ
> +#endif
> +
> +#include <linux/serial_core.h>
> +
> +#define SERIAL_XUL_MAJOR 204
> +#define SERIAL_XUL_MINOR 187
Have you added you new major/minor pair to Documentation/devices.txt?
> +
> +/*
> + * Keeps various tidbits about the serial port taken
> + * from xparameters.h
> + * */
> +
> +struct xul_uart_data {
> + int baud;
> + int parity;
> + int bits;
> + int flow;
> + int uartclk;
> + int irq;
> + int mapbase;
> + int size;
> +};
> +
> +static struct xul_uart_data xul_data[XPAR_XUARTLITE_NUM_INSTANCES] = {
> + {
> + .baud = XPAR_XUL_UART_0_BAUDRATE,
> +#if (XPAR_XUL_UART_0_USE_PARITY != 0)
> + .parity = 'y',
> +#else
> + .parity = 'n',
> +#endif /* XPAR_XUL_UART_0_USE_PARITY */
> + .bits = XPAR_XUL_UART_0_DATA_BITS,
> + .flow = 'n',
> + .uartclk = 100000000 / 16, /* PLB speed / 16 */
> + .irq = XPAR_INTC_0_XUL_UART_0_VEC_ID,
> + .mapbase = XPAR_XUL_UART_0_BASEADDR,
> + .size = (XPAR_XUL_UART_0_HIGHADDR - XPAR_XUL_UART_0_BASEADDR) + 1
> + }
> +
> + /* Add next uart here */
> +};
Don't do this stuff here. Add a table to the platform bus initializer
in virtex.c.
> +
> +static const long ISR_PASS_LIMIT = 255;
> +static struct uart_port xul_uart_ports[XPAR_XUARTLITE_NUM_INSTANCES];
> +
> +#define XUL(port) ((unsigned int)((port)->membase))
> +
> +#define XUL_RX_FIFO_OFFSET 0 /* receive FIFO, read only */
> +#define XUL_TX_FIFO_OFFSET 4 /* transmit FIFO, write only */
> +#define XUL_STATUS_REG_OFFSET 8 /* status register, read only */
> +#define XUL_CONTROL_REG_OFFSET 12 /* control register, write only */
> +
> +#define XUL_CR_ENABLE_INTR 0x10 /* enable interrupt */
> +#define XUL_CR_FIFO_RX_RESET 0x02 /* reset receive FIFO */
> +#define XUL_CR_FIFO_TX_RESET 0x01 /* reset transmit FIFO */
> +
> +#define XUL_SR_PARITY_ERROR 0x80
> +#define XUL_SR_FRAMING_ERROR 0x40
> +#define XUL_SR_OVERRUN_ERROR 0x20
> +#define XUL_SR_TX_FIFO_FULL 0x08 /* transmit FIFO full */
> +#define XUL_SR_TX_FIFO_EMPTY 0x04 /* transmit FIFO empty */
> +#define XUL_SR_RX_FIFO_VALID_DATA 0x01 /* data in receive FIFO */
Break these out into an include file, and share them with
arch/ppc/boot/simple/xuartlite_tty.c
<snip>
> +static void
> +xul_uart_release_port(struct uart_port *port)
> +{
> + if (port->flags & UPF_IOREMAP) {
> + iounmap(port->membase);
> + port->membase = NULL;
> + }
> +
> + release_mem_region(port->mapbase, xul_data[port->line].size);
> +}
> +
> +static int
> +xul_uart_request_port(struct uart_port *port)
> +{
> + int mem_region;
> +
> + if (port->flags & UPF_IOREMAP) {
> + port->membase = ioremap(port->mapbase, xul_data[port->line].size);
> + }
> +
> + if (!port->membase) {
> + return -EINVAL;
> + }
> +
> + mem_region = request_mem_region(port->mapbase, xul_data[port->line].size, "xul_uart") != NULL ? 0 : -EBUSY;
> + return 0;
> +}
> +
> +static void
> +xul_uart_config_port(struct uart_port *port, int flags)
> +{
> + if ( (flags & UART_CONFIG_TYPE) &&
> + (xul_uart_request_port(port) == 0) )
> + port->type = PORT_XUL;
> +}
> +
> +static int
> +xul_uart_verify_port(struct uart_port *port, struct serial_struct *ser)
> +{
> + if ( ser->type != PORT_UNKNOWN && ser->type != PORT_XUL ) {
> + printk(KERN_WARNING "xul_uart_verify_port(1)\n");
> + return -EINVAL;
> + }
> +
> + if ( (ser->irq != port->irq) ||
> + (ser->io_type != SERIAL_IO_MEM) ||
> + (ser->baud_base != port->uartclk) ||
> + (ser->iomem_base != (void*)port->mapbase) ||
> + (ser->hub6 != 0 ) ) {
> + printk(KERN_WARNING "xul_uart_verify_port(1)\n");
> + }
> + return -EINVAL;
> +
> + return 0;
> +}
This will always fail w/ -EINVAL. Check your braces.
Also, merge all these tests into a single if; or break them out into
individual if's. No need for the half-and-half approach done here.
<snip>
======================================================================== */
> +/* Interrupt handling */
> +/* ======================================================================== */
<snip>
> +
> +static irqreturn_t
> +xul_uart_int(int irq, void *dev_id, struct pt_regs *regs)
> +{
> + struct uart_port *port = (struct uart_port *) dev_id;
Cast not needed.
> + unsigned long pass = ISR_PASS_LIMIT;
> + unsigned int keepgoing;
> +
> + if ( irq != port->irq ) {
> + printk( KERN_WARNING
> + "xul_uart_int : " \
> + "Received wrong int %d. Waiting for %d\n",
> + irq, port->irq);
> + return IRQ_NONE;
> + }
No need to check (irq != port->irq). All those code blocks have been
removed from mainline.
<snip>
======================================================================== */
> +/* Platform Driver */
> +/* ======================================================================== */
> +
> +static int __devinit
> +xul_uart_probe(struct platform_device *dev)
> +{
> + /* Probe does nothing */
> + return 0;
> +}
Gah! What's the point of registering with the platform bus, if you
don't have a probe() routine! :) This is where you should pull the
base addresses and number of devices out of the platform_device
structure and dynamically set up your ports.
<snip>
Cheers,
g.
--
Grant Likely, B.Sc. P.Eng.
Secret Lab Technologies Ltd.
grant.likely@secretlab.ca
(403) 399-0195
^ permalink raw reply
* Re: zImage.prep on 2.6.18 & 2.6.19-rc1-gi5
From: Paul Mackerras @ 2006-10-10 22:56 UTC (permalink / raw)
To: kth5; +Cc: linuxppc-dev, Benoit Chesneau
In-Reply-To: <452B55EE.2090008@archlinuxppc.org>
Alexander Baldeck writes:
> I've been trying to get an old Motorola Powerstack II working on Linux
> for the past few days. Everything is working fine except for the fact
> that I have to use a kernel 2.6.8 or earlier. As I'd like to run newer
> udevs this is unfortunately an inacceptible state, no uevents and all.
Ah! A willing victim^H^H^H^H^H^Htester! :)
Could you boot up an old kernel and send me the contents of
/proc/residual, please?
Paul.
^ permalink raw reply
* Re: 2.6.19-rc1: known regressions (v3)
From: Paul Mackerras @ 2006-10-10 22:58 UTC (permalink / raw)
To: Adrian Bunk
Cc: alsa-devel, Thierry Vignaud, Torsten Kaiser,
Linux Kernel Mailing List, linuxppc-dev, Andrew de Quincey,
Vivek Goyal, Jens Axboe, linux-usb-devel, Steve Fox, lm-sensors,
art, Mel Gorman, Michael Krufky, Sylvain BERTRAND, jgarzik,
Prakash Punnoor, fastboot, Olaf Hering, discuss, Trond Myklebust,
Alex Romosan, Linus Torvalds, Dave Kleikamp, Antonino Daplas,
v4l-dvb-maintainer, Johannes Berg, perex, linux-pm,
linux-fbdev-devel, linux-ide, netdev, Greg Kroah-Hartman, ak,
Sukadev Bhattiprolu, ebiederm, Matthieu Castet, Jean Delvare,
pavel, Ernst Herzberg, David Hubbard
In-Reply-To: <20061010051019.GB3650@stusta.de>
Adrian Bunk writes:
> Subject : sleep/wakeup on powerbooks apparently busted
> References : http://lkml.org/lkml/2006/10/5/13
> Submitter : Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Handled-By : Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Status : Benjamin will investigate
Should be fixed once Linus pulls the powerpc.git tree.
Paul.
^ permalink raw reply
* Re: BUG() in copy_fdtable() with 64K pages (2.6.19-rc1-mm1)
From: Linas Vepstas @ 2006-10-10 23:05 UTC (permalink / raw)
To: Vadim Lobanov, Andrew Morton
Cc: Olof Johansson, Andrew Morton, linux-kernel, linuxppc-dev
In-Reply-To: <200610101331.11842.vlobanov@speakeasy.net>
On Tue, Oct 10, 2006 at 01:31:11PM -0700, Vadim Lobanov wrote:
> On Tuesday 10 October 2006 13:20, Linas Vepstas wrote:
> > On Tue, Oct 10, 2006 at 12:15:19PM -0500, Olof Johansson wrote:
> > > I keep hitting this on -rc1-mm1. The system comes up but I can't login
> > > since login hits it.
> > >
> > > Bisect says that
> > > fdtable-implement-new-pagesize-based-fdtable-allocator.patch is at fault.
> > >
> > > CONFIG_PPC_64K_PAGES=y is required for it to fail, with 4K pages it's
> > > fine.
> > >
> > > (Hardware is a Quad G5, 1GB RAM, g5_defconfig + CONFIG_PPC_64K_PAGES,
> > > defaults on all new options)
> > >
> > > kernel BUG in copy_fdtable at fs/file.c:138!
> >
> > FWIW, I too was hitting this bug, during init:
> >
> > [ 41.659823] Freeing unused kernel memory: 320k freed
> > INIT: version 2.86 bootin[ 42.509322] kernel BUG in copy_fdtable at
> > fs/file.c:138!
> >
> > and of course systm does not come up.
I forgot to mention my h/w was completely different (a cell)
> I'm digging through this right now, trying to figure out exactly what went
> wrong (and why some people are seeing this, while others are not). All the
> code seems correct; another pair of eyes is always welcome though.
The patch that AKPM just posted at
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.19-rc1/2.6.19-rc1-mm1/hot-fixes/revert-fdtable-implement-new-pagesize-based-fdtable-allocator.patch
boots for me.
Thanks Andrew!
--linas
^ permalink raw reply
* Re: [PATCH] trivial iomem annotations (arch/powerpc/platfroms/parsemi/pci.c)
From: Michael Buesch @ 2006-10-10 23:16 UTC (permalink / raw)
To: Al Viro; +Cc: linuxppc-dev, Linus Torvalds, linux-kernel
In-Reply-To: <20061009152309.GQ29920@ftp.linux.org.uk>
On Monday 09 October 2006 17:23, Al Viro wrote:
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
> arch/powerpc/platforms/pasemi/pci.c | 26 +++++++++++++-------------
> 1 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/arch/powerpc/platforms/pasemi/pci.c b/arch/powerpc/platforms/pasemi/pci.c
> index 4679c52..39020c1 100644
> --- a/arch/powerpc/platforms/pasemi/pci.c
> +++ b/arch/powerpc/platforms/pasemi/pci.c
> @@ -35,17 +35,17 @@ #define PA_PXP_CFA(bus, devfn, off) (((b
>
> #define CONFIG_OFFSET_VALID(off) ((off) < 4096)
>
> -static unsigned long pa_pxp_cfg_addr(struct pci_controller *hose,
> +static void volatile __iomem *pa_pxp_cfg_addr(struct pci_controller *hose,
> u8 bus, u8 devfn, int offset)
> {
> - return ((unsigned long)hose->cfg_data) + PA_PXP_CFA(bus, devfn, offset);
> + return hose->cfg_data + PA_PXP_CFA(bus, devfn, offset);
> }
>
> static int pa_pxp_read_config(struct pci_bus *bus, unsigned int devfn,
> int offset, int len, u32 *val)
> {
> struct pci_controller *hose;
> - unsigned long addr;
> + void volatile __iomem *addr;
I think you should drop all these new "volatile"s.
> hose = pci_bus_to_host(bus);
> if (!hose)
> @@ -62,13 +62,13 @@ static int pa_pxp_read_config(struct pci
> */
> switch (len) {
> case 1:
> - *val = in_8((u8 *)addr);
> + *val = in_8(addr);
> break;
> case 2:
> - *val = in_le16((u16 *)addr);
> + *val = in_le16(addr);
> break;
> default:
> - *val = in_le32((u32 *)addr);
> + *val = in_le32(addr);
> break;
> }
>
> @@ -79,7 +79,7 @@ static int pa_pxp_write_config(struct pc
> int offset, int len, u32 val)
> {
> struct pci_controller *hose;
> - unsigned long addr;
> + void volatile __iomem *addr;
>
> hose = pci_bus_to_host(bus);
> if (!hose)
> @@ -96,16 +96,16 @@ static int pa_pxp_write_config(struct pc
> */
> switch (len) {
> case 1:
> - out_8((u8 *)addr, val);
> - (void) in_8((u8 *)addr);
> + out_8(addr, val);
> + (void) in_8(addr);
> break;
> case 2:
> - out_le16((u16 *)addr, val);
> - (void) in_le16((u16 *)addr);
> + out_le16(addr, val);
> + (void) in_le16(addr);
> break;
> default:
> - out_le32((u32 *)addr, val);
> - (void) in_le32((u32 *)addr);
> + out_le32(addr, val);
> + (void) in_le32(addr);
> break;
> }
> return PCIBIOS_SUCCESSFUL;
--
Greetings Michael.
^ permalink raw reply
* Re: [PATCH 21/21]: powerpc/cell spidernet DMA coalescing
From: jschopp @ 2006-10-10 23:20 UTC (permalink / raw)
To: Linas Vepstas
Cc: akpm, jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <20061010212324.GR4381@austin.ibm.com>
Linas Vepstas wrote:
> The current driver code performs 512 DMA mappns of a bunch of
> 32-byte structures. This is silly, as they are all in contiguous
> memory. Ths patch changes the code to DMA map the entie area
> with just one call.
>
> Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
> Cc: James K Lewis <jklewis@us.ibm.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
The others look good, but this one complicates the code and doesn't have any benefit. 20
for 21 isn't bad.
^ permalink raw reply
* Re: [PATCH 21/21]: powerpc/cell spidernet DMA coalescing
From: Geoff Levand @ 2006-10-11 1:46 UTC (permalink / raw)
To: jschopp
Cc: akpm, jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <452C2AAA.5070001@austin.ibm.com>
jschopp wrote:
> Linas Vepstas wrote:
>> The current driver code performs 512 DMA mappns of a bunch of
>> 32-byte structures. This is silly, as they are all in contiguous
>> memory. Ths patch changes the code to DMA map the entie area
>> with just one call.
>>
>> Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
>> Cc: James K Lewis <jklewis@us.ibm.com>
>> Cc: Arnd Bergmann <arnd@arndb.de>
>
> The others look good, but this one complicates the code and doesn't have any benefit. 20
> for 21 isn't bad.
Linas,
Is the motivation for this change to improve performance by reducing the overhead
of the mapping calls? If so, there may be some benefit for some systems. Could
you please elaborate?
-Geoff
^ permalink raw reply
* Re: 2.6.19-rc1: known regressions (v3)
From: Adrian Bunk @ 2006-10-11 3:08 UTC (permalink / raw)
To: Paul Mackerras; +Cc: linuxppc-dev, pavel, linux-kernel, linux-pm
In-Reply-To: <17708.9637.569670.824121@cargo.ozlabs.ibm.com>
On Wed, Oct 11, 2006 at 08:58:45AM +1000, Paul Mackerras wrote:
> Adrian Bunk writes:
>
> > Subject : sleep/wakeup on powerbooks apparently busted
> > References : http://lkml.org/lkml/2006/10/5/13
> > Submitter : Benjamin Herrenschmidt <benh@kernel.crashing.org>
> > Handled-By : Benjamin Herrenschmidt <benh@kernel.crashing.org>
> > Status : Benjamin will investigate
>
> Should be fixed once Linus pulls the powerpc.git tree.
Thanks for the information, I've removed it from the list.
> Paul.
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
^ permalink raw reply
* Re: [PATCH] Add Kconfig dependency !VT for VIOCONS
From: Adrian Bunk @ 2006-10-11 3:56 UTC (permalink / raw)
To: Randy Dunlap; +Cc: linuxppc-dev, linux-kernel
In-Reply-To: <20061010091004.d6d91f8d.rdunlap@xenotime.net>
On Tue, Oct 10, 2006 at 09:10:04AM -0700, Randy Dunlap wrote:
> On Tue, 10 Oct 2006 06:55:34 +0200 Adrian Bunk wrote:
>
> > On Fri, Oct 06, 2006 at 02:34:37PM -0700, Randy Dunlap wrote:
> > > On Fri, 6 Oct 2006 13:00:07 -0700 Judith Lebzelter wrote:
> > >
> > > > Actually, this gets rid of the CONFIG_VIOCONS from my .config, but
> > > > then I get another warning when I build:
> > > >
> > > > Warning! Found recursive dependency: VT VIOCONS VT
> > > >
> > > > Can anyone suggest something?
> > >
> > > I think that your patch is mostly good/correct, but one more line
> > > is needed on the VT side: a deletion.
> > >
> > > This works for me:
> > >
> > > From: Randy Dunlap <rdunlap@xenotime.net>
> > >
> > > Make allmodconfig .config build successfully by making VIOCONS
> > > available only if VT=n. VT need not check VIOCONS.
> > >
> > > Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
> > > ---
> > > arch/powerpc/platforms/iseries/Kconfig | 2 +-
> > > drivers/char/Kconfig | 1 -
> > > 2 files changed, 1 insertion(+), 2 deletions(-)
> > >
> > > --- linux-2619-rc1g2.orig/arch/powerpc/platforms/iseries/Kconfig
> > > +++ linux-2619-rc1g2/arch/powerpc/platforms/iseries/Kconfig
> > > @@ -3,7 +3,7 @@ menu "iSeries device drivers"
> > > depends on PPC_ISERIES
> > >
> > > config VIOCONS
> > > - tristate "iSeries Virtual Console Support (Obsolete)"
> > > + tristate "iSeries Virtual Console Support (Obsolete)" if !VT
> > > help
> > >...
> > > config VT
> > > bool "Virtual terminal" if EMBEDDED
> >
> > With this dependency on EMBEDDED, you could as well simply remove
> > VIOCONS...
> >
> > > select INPUT
> > > - default y if !VIOCONS
> >
> > Removing the "default y" is wrong.
>
> Oops, yes, agreed.
>
> I don't see a way (using: make ARCH=powerpc iseries_defconfig,
> which wants to enable VIOCONS) to prevent VT from being enabled
> so that VIOCONS can be enabled.
With iseries_defconfig, CONFIG_VT is not enabled.
> However, since VIOCONS is marked (Obsolete) and since the powerpc
> people don't comment on this patch & problem, maybe Judith is the
> only person who cares.
allmodconfig turns on CONFIG_EMBEDDED.
> ~Randy
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
^ permalink raw reply
* Re: [PATCH] Add Kconfig dependency !VT for VIOCONS
From: Randy Dunlap @ 2006-10-11 4:08 UTC (permalink / raw)
To: Adrian Bunk; +Cc: linuxppc-dev, linux-kernel
In-Reply-To: <20061011035629.GC721@stusta.de>
On Wed, 11 Oct 2006 05:56:29 +0200 Adrian Bunk wrote:
> On Tue, Oct 10, 2006 at 09:10:04AM -0700, Randy Dunlap wrote:
> > On Tue, 10 Oct 2006 06:55:34 +0200 Adrian Bunk wrote:
> >
> > > On Fri, Oct 06, 2006 at 02:34:37PM -0700, Randy Dunlap wrote:
> > > > On Fri, 6 Oct 2006 13:00:07 -0700 Judith Lebzelter wrote:
> > > >
> > > > > Actually, this gets rid of the CONFIG_VIOCONS from my .config, but
> > > > > then I get another warning when I build:
> > > > >
> > > > > Warning! Found recursive dependency: VT VIOCONS VT
> > > > >
> > > > > Can anyone suggest something?
> > > >
> > > > I think that your patch is mostly good/correct, but one more line
> > > > is needed on the VT side: a deletion.
> > > >
> > > > This works for me:
> > > >
> > > > From: Randy Dunlap <rdunlap@xenotime.net>
> > > >
> > > > Make allmodconfig .config build successfully by making VIOCONS
> > > > available only if VT=n. VT need not check VIOCONS.
> > > >
> > > > Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
> > > > ---
> > > > arch/powerpc/platforms/iseries/Kconfig | 2 +-
> > > > drivers/char/Kconfig | 1 -
> > > > 2 files changed, 1 insertion(+), 2 deletions(-)
> > > >
> > > > --- linux-2619-rc1g2.orig/arch/powerpc/platforms/iseries/Kconfig
> > > > +++ linux-2619-rc1g2/arch/powerpc/platforms/iseries/Kconfig
> > > > @@ -3,7 +3,7 @@ menu "iSeries device drivers"
> > > > depends on PPC_ISERIES
> > > >
> > > > config VIOCONS
> > > > - tristate "iSeries Virtual Console Support (Obsolete)"
> > > > + tristate "iSeries Virtual Console Support (Obsolete)" if !VT
> > > > help
> > > >...
> > > > config VT
> > > > bool "Virtual terminal" if EMBEDDED
> > >
> > > With this dependency on EMBEDDED, you could as well simply remove
> > > VIOCONS...
> > >
> > > > select INPUT
> > > > - default y if !VIOCONS
> > >
> > > Removing the "default y" is wrong.
> >
> > Oops, yes, agreed.
> >
> > I don't see a way (using: make ARCH=powerpc iseries_defconfig,
> > which wants to enable VIOCONS) to prevent VT from being enabled
> > so that VIOCONS can be enabled.
>
> With iseries_defconfig, CONFIG_VT is not enabled.
>
> > However, since VIOCONS is marked (Obsolete) and since the powerpc
> > people don't comment on this patch & problem, maybe Judith is the
> > only person who cares.
>
> allmodconfig turns on CONFIG_EMBEDDED.
So am I doing this incorrectly?
$ make ARCH=powerpc iseries_defconfig
$editor .config
CONFIG_VT=y
...
#
# iSeries device drivers
#
CONFIG_VIODASD=y
CONFIG_VIOCD=m
CONFIG_VIOTAPE=m
CONFIG_VIOPATH=y
---
~Randy
^ permalink raw reply
* Re: [PATCH] Add Kconfig dependency !VT for VIOCONS
From: Adrian Bunk @ 2006-10-11 4:30 UTC (permalink / raw)
To: Randy Dunlap; +Cc: linuxppc-dev, linux-kernel
In-Reply-To: <20061010210858.f8c85692.rdunlap@xenotime.net>
On Tue, Oct 10, 2006 at 09:08:58PM -0700, Randy Dunlap wrote:
> On Wed, 11 Oct 2006 05:56:29 +0200 Adrian Bunk wrote:
>
> > On Tue, Oct 10, 2006 at 09:10:04AM -0700, Randy Dunlap wrote:
> > > On Tue, 10 Oct 2006 06:55:34 +0200 Adrian Bunk wrote:
> > >
> > > > On Fri, Oct 06, 2006 at 02:34:37PM -0700, Randy Dunlap wrote:
> > > > > On Fri, 6 Oct 2006 13:00:07 -0700 Judith Lebzelter wrote:
> > > > >
> > > > > > Actually, this gets rid of the CONFIG_VIOCONS from my .config, but
> > > > > > then I get another warning when I build:
> > > > > >
> > > > > > Warning! Found recursive dependency: VT VIOCONS VT
> > > > > >
> > > > > > Can anyone suggest something?
> > > > >
> > > > > I think that your patch is mostly good/correct, but one more line
> > > > > is needed on the VT side: a deletion.
> > > > >
> > > > > This works for me:
> > > > >
> > > > > From: Randy Dunlap <rdunlap@xenotime.net>
> > > > >
> > > > > Make allmodconfig .config build successfully by making VIOCONS
> > > > > available only if VT=n. VT need not check VIOCONS.
> > > > >
> > > > > Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
> > > > > ---
> > > > > arch/powerpc/platforms/iseries/Kconfig | 2 +-
> > > > > drivers/char/Kconfig | 1 -
> > > > > 2 files changed, 1 insertion(+), 2 deletions(-)
> > > > >
> > > > > --- linux-2619-rc1g2.orig/arch/powerpc/platforms/iseries/Kconfig
> > > > > +++ linux-2619-rc1g2/arch/powerpc/platforms/iseries/Kconfig
> > > > > @@ -3,7 +3,7 @@ menu "iSeries device drivers"
> > > > > depends on PPC_ISERIES
> > > > >
> > > > > config VIOCONS
> > > > > - tristate "iSeries Virtual Console Support (Obsolete)"
> > > > > + tristate "iSeries Virtual Console Support (Obsolete)" if !VT
> > > > > help
> > > > >...
> > > > > config VT
> > > > > bool "Virtual terminal" if EMBEDDED
> > > >
> > > > With this dependency on EMBEDDED, you could as well simply remove
> > > > VIOCONS...
> > > >
> > > > > select INPUT
> > > > > - default y if !VIOCONS
> > > >
> > > > Removing the "default y" is wrong.
> > >
> > > Oops, yes, agreed.
> > >
> > > I don't see a way (using: make ARCH=powerpc iseries_defconfig,
> > > which wants to enable VIOCONS) to prevent VT from being enabled
> > > so that VIOCONS can be enabled.
> >
> > With iseries_defconfig, CONFIG_VT is not enabled.
> >
> > > However, since VIOCONS is marked (Obsolete) and since the powerpc
> > > people don't comment on this patch & problem, maybe Judith is the
> > > only person who cares.
> >
> > allmodconfig turns on CONFIG_EMBEDDED.
>
> So am I doing this incorrectly?
>
> $ make ARCH=powerpc iseries_defconfig
>
> $editor .config
>
> CONFIG_VT=y
> ...
> #
> # iSeries device drivers
> #
> CONFIG_VIODASD=y
> CONFIG_VIOCD=m
> CONFIG_VIOTAPE=m
> CONFIG_VIOPATH=y
CONFIG_VIOCONS is not enabled.
> ~Randy
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
^ permalink raw reply
* Re: [PATCH] Add Kconfig dependency !VT for VIOCONS
From: Randy Dunlap @ 2006-10-11 4:35 UTC (permalink / raw)
To: Adrian Bunk; +Cc: linuxppc-dev, linux-kernel
In-Reply-To: <20061011043006.GF721@stusta.de>
On Wed, 11 Oct 2006 06:30:06 +0200 Adrian Bunk wrote:
> On Tue, Oct 10, 2006 at 09:08:58PM -0700, Randy Dunlap wrote:
> > On Wed, 11 Oct 2006 05:56:29 +0200 Adrian Bunk wrote:
> >
> > > On Tue, Oct 10, 2006 at 09:10:04AM -0700, Randy Dunlap wrote:
> > > > On Tue, 10 Oct 2006 06:55:34 +0200 Adrian Bunk wrote:
> > > >
> > > > > On Fri, Oct 06, 2006 at 02:34:37PM -0700, Randy Dunlap wrote:
> > > > > > On Fri, 6 Oct 2006 13:00:07 -0700 Judith Lebzelter wrote:
> > > > > >
> > > > > > > Actually, this gets rid of the CONFIG_VIOCONS from my .config, but
> > > > > > > then I get another warning when I build:
> > > > > > >
> > > > > > > Warning! Found recursive dependency: VT VIOCONS VT
> > > > > > >
> > > > > > > Can anyone suggest something?
> > > > > >
> > > > > > I think that your patch is mostly good/correct, but one more line
> > > > > > is needed on the VT side: a deletion.
> > > > > >
> > > > > > This works for me:
> > > > > >
> > > > > > From: Randy Dunlap <rdunlap@xenotime.net>
> > > > > >
> > > > > > Make allmodconfig .config build successfully by making VIOCONS
> > > > > > available only if VT=n. VT need not check VIOCONS.
> > > > > >
> > > > > > Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
> > > > > > ---
> > > > > > arch/powerpc/platforms/iseries/Kconfig | 2 +-
> > > > > > drivers/char/Kconfig | 1 -
> > > > > > 2 files changed, 1 insertion(+), 2 deletions(-)
> > > > > >
> > > > > > --- linux-2619-rc1g2.orig/arch/powerpc/platforms/iseries/Kconfig
> > > > > > +++ linux-2619-rc1g2/arch/powerpc/platforms/iseries/Kconfig
> > > > > > @@ -3,7 +3,7 @@ menu "iSeries device drivers"
> > > > > > depends on PPC_ISERIES
> > > > > >
> > > > > > config VIOCONS
> > > > > > - tristate "iSeries Virtual Console Support (Obsolete)"
> > > > > > + tristate "iSeries Virtual Console Support (Obsolete)" if !VT
> > > > > > help
> > > > > >...
> > > > > > config VT
> > > > > > bool "Virtual terminal" if EMBEDDED
> > > > >
> > > > > With this dependency on EMBEDDED, you could as well simply remove
> > > > > VIOCONS...
> > > > >
> > > > > > select INPUT
> > > > > > - default y if !VIOCONS
> > > > >
> > > > > Removing the "default y" is wrong.
> > > >
> > > > Oops, yes, agreed.
> > > >
> > > > I don't see a way (using: make ARCH=powerpc iseries_defconfig,
> > > > which wants to enable VIOCONS) to prevent VT from being enabled
> > > > so that VIOCONS can be enabled.
> > >
> > > With iseries_defconfig, CONFIG_VT is not enabled.
> > >
> > > > However, since VIOCONS is marked (Obsolete) and since the powerpc
> > > > people don't comment on this patch & problem, maybe Judith is the
> > > > only person who cares.
> > >
> > > allmodconfig turns on CONFIG_EMBEDDED.
> >
> > So am I doing this incorrectly?
> >
> > $ make ARCH=powerpc iseries_defconfig
> >
> > $editor .config
> >
> > CONFIG_VT=y
> > ...
> > #
> > # iSeries device drivers
> > #
> > CONFIG_VIODASD=y
> > CONFIG_VIOCD=m
> > CONFIG_VIOTAPE=m
> > CONFIG_VIOPATH=y
>
> CONFIG_VIOCONS is not enabled.
Yep. That was with my patch.
But I see what you mean. Thanks.
---
~Randy
^ permalink raw reply
* [PATCH] powerpc: New DCR access methods
From: Benjamin Herrenschmidt @ 2006-10-11 5:42 UTC (permalink / raw)
To: linuxppc-dev list; +Cc: cbe-oss-dev@ozlabs.org, Arnd Bergmann
Ѕubject: powerpc: generic DCR access
This patch adds new dcr_map/dcr_read/dcr_write accessors for DCRs that
can be used by drivers to transparently address either native DCRs or
memory mapped DCRs. The implementation for memory mapped DCRs is done
after the binding being currently worked on for SLOF and the Axon
chipset. This patch enables it for the cell native platform
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
Arnd: This will replace powerpc-generic-dcr.diff, though don't put it in
your tree just yet. I'll have other axon related patches including a new
one porting emac over and a new infrastructure for probing OF devices
in the upcoming few days. I'm posting this one early to get comments from
4xx folks.
Eugene: As you can see, the overhead for 4xx is nil. I have a patch hacking
the MAL driver to use those instead of mfdcr/mtdcr. I did it to quicky test
I didn't do anything stupid and it still builds with an ebony_defconfig with
ARCH=ppc. I'll send it separately.
Index: linux-cell/include/asm-powerpc/dcr.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-cell/include/asm-powerpc/dcr.h 2006-10-11 15:28:41.000000000 +1000
@@ -0,0 +1,40 @@
+/*
+ * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp.
+ * <benh@kernel.crashing.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _ASM_POWERPC_DCR_H
+#define _ASM_POWERPC_DCR_H
+#ifdef __KERNEL__
+
+#ifdef CONFIG_PPC_DCR_NATIVE
+#include <asm/dcr-native.h>
+#else
+#include <asm/dcr-mmio.h>
+#endif
+
+/*
+ * On CONFIG_PPC_MERGE, we have additional helpers to read the DCR
+ * base from the device-tree
+ */
+#ifdef CONFIG_PPC_MERGE
+extern int dcr_resource_start(struct device_node *np, unsigned int index);
+extern int dcr_resource_len(struct device_node *np, unsigned int index);
+#endif /* CONFIG_PPC_MERGE */
+
+#endif /* __KERNEL__ */
+#endif /* _ASM_POWERPC_DCR_H */
Index: linux-cell/arch/powerpc/Kconfig
===================================================================
--- linux-cell.orig/arch/powerpc/Kconfig 2006-10-11 15:27:03.000000000 +1000
+++ linux-cell/arch/powerpc/Kconfig 2006-10-11 15:29:31.000000000 +1000
@@ -160,9 +160,11 @@ config PPC_86xx
config 40x
bool "AMCC 40x"
+ select PPC_DCR_NATIVE
config 44x
bool "AMCC 44x"
+ select PPC_DCR_NATIVE
config 8xx
bool "Freescale 8xx"
@@ -208,6 +210,19 @@ config PPC_FPU
bool
default y if PPC64
+config PPC_DCR_NATIVE
+ bool
+ default n
+
+config PPC_DCR_MMIO
+ bool
+ default n
+
+config PPC_DCR
+ bool
+ depends on PPC_DCR_NATIVE || PPC_DCR_MMIO
+ default y
+
config BOOKE
bool
depends on E200 || E500
@@ -445,6 +460,7 @@ config PPC_CELL
config PPC_CELL_NATIVE
bool
select PPC_CELL
+ select PPC_DCR_MMIO
default n
config PPC_IBM_CELL_BLADE
Index: linux-cell/include/asm-powerpc/dcr-mmio.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-cell/include/asm-powerpc/dcr-mmio.h 2006-10-11 15:34:02.000000000 +1000
@@ -0,0 +1,51 @@
+/*
+ * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp.
+ * <benh@kernel.crashing.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _ASM_POWERPC_DCR_MMIO_H
+#define _ASM_POWERPC_DCR_MMIO_H
+#ifdef __KERNEL__
+
+#include <asm/io.h>
+
+typedef struct { void __iomem *token; unsigned int stride; } dcr_host_t;
+
+#define DCR_MAP_OK(host) ((host).token != NULL)
+
+extern dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n,
+ unsigned int dcr_c);
+extern void dcr_unmap(dcr_host_t host, unsigned int dcr_n, unsigned int dcr_c);
+
+static inline u32 dcr_read(dcr_host_t host, unsigned int dcr_n)
+{
+ return in_be32(host.token + dcr_n * host.stride);
+}
+
+static inline void dcr_write(dcr_host_t host, unsigned int dcr_n, u32 value)
+{
+ out_be32(host.token + dcr_n * host.stride, value);
+}
+
+extern u64 of_translate_dcr_address(struct device_node *dev,
+ unsigned int dcr_n,
+ unsigned int *stride);
+
+#endif /* __KERNEL__ */
+#endif /* _ASM_POWERPC_DCR_MMIO_H */
+
+
Index: linux-cell/include/asm-powerpc/dcr-native.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-cell/include/asm-powerpc/dcr-native.h 2006-10-11 15:28:41.000000000 +1000
@@ -0,0 +1,39 @@
+/*
+ * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp.
+ * <benh@kernel.crashing.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _ASM_POWERPC_DCR_NATIVE_H
+#define _ASM_POWERPC_DCR_NATIVE_H
+#ifdef __KERNEL__
+
+#include <asm/reg.h>
+
+typedef struct {} dcr_host_t;
+
+#define DCR_MAP_OK(host) (1)
+
+#define dcr_map(dev, dcr_n, dcr_c) {}
+#define dcr_unmap(host, dcr_n, dcr_c) {}
+#define dcr_read(host, dcr_n) mfdcr(dcr_n)
+#define dcr_write(host, dcr_n, value) mtdcr(dcr_n, value)
+
+
+#endif /* __KERNEL__ */
+#endif /* _ASM_POWERPC_DCR_NATIVE_H */
+
+
Index: linux-cell/arch/ppc/Kconfig
===================================================================
--- linux-cell.orig/arch/ppc/Kconfig 2006-10-11 15:27:03.000000000 +1000
+++ linux-cell/arch/ppc/Kconfig 2006-10-11 15:28:41.000000000 +1000
@@ -77,9 +77,11 @@ config 6xx
config 40x
bool "40x"
+ select PPC_DCR_NATIVE
config 44x
bool "44x"
+ select PPC_DCR_NATIVE
config 8xx
bool "8xx"
@@ -95,6 +97,15 @@ endchoice
config PPC_FPU
bool
+config PPC_DCR_NATIVE
+ bool
+ default n
+
+config PPC_DCR
+ bool
+ depends on PPC_DCR_NATIVE
+ default y
+
config BOOKE
bool
depends on E200 || E500
Index: linux-cell/arch/powerpc/kernel/Makefile
===================================================================
--- linux-cell.orig/arch/powerpc/kernel/Makefile 2006-10-11 15:27:03.000000000 +1000
+++ linux-cell/arch/powerpc/kernel/Makefile 2006-10-11 15:28:41.000000000 +1000
@@ -60,6 +60,8 @@ obj-$(CONFIG_BOOTX_TEXT) += btext.o
obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_KPROBES) += kprobes.o
obj-$(CONFIG_PPC_UDBG_16550) += legacy_serial.o udbg_16550.o
+obj-$(CONFIG_PPC_DCR) += dcr.o
+
module-$(CONFIG_PPC64) += module_64.o
obj-$(CONFIG_MODULES) += $(module-y)
Index: linux-cell/arch/powerpc/kernel/dcr.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-cell/arch/powerpc/kernel/dcr.c 2006-10-11 15:35:34.000000000 +1000
@@ -0,0 +1,120 @@
+/*
+ * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp.
+ * <benh@kernel.crashing.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <asm/prom.h>
+#include <asm/dcr.h>
+
+int dcr_resource_start(struct device_node *np, unsigned int index)
+{
+ unsigned int ds;
+ const u32 *dr = get_property(np, "dcr-reg", &ds);
+
+ if (dr == NULL || ds & 1 || index >= (ds / 8))
+ return -EINVAL;
+
+ return dr[index * 2];
+}
+
+int dcr_resource_len(struct device_node *np, unsigned int index)
+{
+ unsigned int ds;
+ const u32 *dr = get_property(np, "dcr-reg", &ds);
+
+ if (dr == NULL || ds & 1 || index >= (ds / 8))
+ return -EINVAL;
+
+ return dr[index * 2 + 1];
+}
+
+#ifndef CONFIG_PPC_DCR_NATIVE
+
+static struct device_node * find_dcr_parent(struct device_node * node)
+{
+ struct device_node *par, *tmp;
+ const u32 *p;
+
+ for (par = of_node_get(node); par;) {
+ if (get_property(par, "dcr-controller", NULL))
+ break;
+ p = get_property(par, "dcr-parent", NULL);
+ tmp = par;
+ if (p == NULL)
+ par = of_get_parent(par);
+ else
+ par = of_find_node_by_phandle(*p);
+ of_node_put(tmp);
+ }
+ return par;
+}
+
+u64 of_translate_dcr_address(struct device_node *dev,
+ unsigned int dcr_n,
+ unsigned int *stride)
+{
+ struct device_node *dp;
+ const u32 *p;
+ u64 ret;
+
+ dp = find_dcr_parent(dev);
+ if (dp == NULL)
+ return OF_BAD_ADDR;
+
+ /* Stride is not properly defined yet, default to 0x10 for Axon */
+ p = get_property(dp, "dcr-mmio-stride", NULL);
+ *stride = (p == NULL) ? 0x10 : *p;
+
+ p = get_property(dp, "dcr-mmio-range", NULL);
+ if (p == NULL)
+ return OF_BAD_ADDR;
+
+ /* Maybe could do some better range checking here */
+ ret = of_translate_address(dp, p);
+ if (ret != OF_BAD_ADDR)
+ ret += *stride * dcr_n;
+ return ret;
+}
+
+dcr_host_t dcr_map(struct device_node *dev, unsigned int dcr_n,
+ unsigned int dcr_c)
+{
+ dcr_host_t ret = { .token = NULL, .stride = 0 };
+ u64 addr;
+
+ addr = of_translate_dcr_address(dev, dcr_n, &ret.stride);
+ if (addr == OF_BAD_ADDR)
+ return ret;
+ ret.token = ioremap(addr, dcr_c * ret.stride);
+ if (ret.token == NULL)
+ return ret;
+ ret.token -= dcr_n * ret.stride;
+ return ret;
+}
+
+void dcr_unmap(dcr_host_t host, unsigned int dcr_n, unsigned int dcr_c)
+{
+ dcr_host_t h = host;
+
+ if (h.token == NULL)
+ return;
+ h.token -= dcr_n * h.stride;
+ iounmap(h.token);
+ h.token = NULL;
+}
+
+#endif /* !defined(CONFIG_PPC_DCR_NATIVE) */
^ permalink raw reply
* [PATCH] powerpc: make MAL use the new DCR methods
From: Benjamin Herrenschmidt @ 2006-10-11 5:45 UTC (permalink / raw)
To: Eugene Surovegin; +Cc: linuxppc-dev list
This is a test patch to validate the new DCR method code for the
"native" case. It will ultimately be the first of a pile porting the
EMAC driver to ARCH=powerpc and non-native DCRs.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Index: linux-cell/drivers/net/ibm_emac/ibm_emac_mal.h
===================================================================
--- linux-cell.orig/drivers/net/ibm_emac/ibm_emac_mal.h 2006-10-11 13:01:59.000000000 +1000
+++ linux-cell/drivers/net/ibm_emac/ibm_emac_mal.h 2006-10-11 14:35:28.000000000 +1000
@@ -24,6 +24,7 @@
#include <linux/netdevice.h>
#include <asm/io.h>
+#include <asm/dcr.h>
/*
* These MAL "versions" probably aren't the real versions IBM uses for these
@@ -191,6 +192,7 @@ struct mal_commac {
struct ibm_ocp_mal {
int dcrbase;
+ dcr_host_t dcrhost;
struct list_head poll_list;
struct net_device poll_dev;
@@ -207,12 +209,12 @@ struct ibm_ocp_mal {
static inline u32 get_mal_dcrn(struct ibm_ocp_mal *mal, int reg)
{
- return mfdcr(mal->dcrbase + reg);
+ return dcr_read(mal->dcrhost, mal->dcrbase + reg);
}
static inline void set_mal_dcrn(struct ibm_ocp_mal *mal, int reg, u32 val)
{
- mtdcr(mal->dcrbase + reg, val);
+ dcr_write(mal->dcrhost, mal->dcrbase + reg, val);
}
/* Register MAL devices */
^ permalink raw reply
* [PATCH] ppc: Add missing calls set_irq_regs
From: Kumar Gala @ 2006-10-11 7:06 UTC (permalink / raw)
To: Linus Torvalds, Paul Mackerras; +Cc: linuxppc-dev, linux-kernel
In the timer_interrupt we were not calling set_irq_regs() and if we are
profiling we will end up calling get_irq_regs(). This causes bad things to
happen.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
commit 6799b47da9c145fba3a855f74e20680acffe87a7
tree 30ed136bbebf14a71c5b0eeed76510ef884aee76
parent 53a5fbdc2dff55161a206ed1a1385a8fa8055c34
author Kumar Gala <galak@kernel.crashing.org> Wed, 11 Oct 2006 01:57:04 -0500
committer Kumar Gala <galak@kernel.crashing.org> Wed, 11 Oct 2006 01:57:04 -0500
arch/ppc/kernel/time.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/arch/ppc/kernel/time.c b/arch/ppc/kernel/time.c
index d4b2cf7..18ee851 100644
--- a/arch/ppc/kernel/time.c
+++ b/arch/ppc/kernel/time.c
@@ -62,6 +62,7 @@ #include <asm/nvram.h>
#include <asm/cache.h>
#include <asm/8xx_immap.h>
#include <asm/machdep.h>
+#include <asm/irq_regs.h>
#include <asm/time.h>
@@ -129,6 +130,7 @@ void wakeup_decrementer(void)
*/
void timer_interrupt(struct pt_regs * regs)
{
+ struct pt_regs *old_regs;
int next_dec;
unsigned long cpu = smp_processor_id();
unsigned jiffy_stamp = last_jiffy_stamp(cpu);
@@ -137,6 +139,7 @@ void timer_interrupt(struct pt_regs * re
if (atomic_read(&ppc_n_lost_interrupts) != 0)
do_IRQ(regs);
+ old_regs = set_irq_regs(regs);
irq_enter();
while ((next_dec = tb_ticks_per_jiffy - tb_delta(&jiffy_stamp)) <= 0) {
@@ -188,6 +191,7 @@ void timer_interrupt(struct pt_regs * re
ppc_md.heartbeat();
irq_exit();
+ set_irq_regs(old_regs);
}
/*
^ permalink raw reply related
* Re: [PATCH 21/21]: powerpc/cell spidernet DMA coalescing
From: Benjamin Herrenschmidt @ 2006-10-11 7:15 UTC (permalink / raw)
To: jschopp
Cc: akpm, jeff, Arnd Bergmann, netdev, James K Lewis, linux-kernel,
linuxppc-dev
In-Reply-To: <452C2AAA.5070001@austin.ibm.com>
On Tue, 2006-10-10 at 18:20 -0500, jschopp wrote:
> Linas Vepstas wrote:
> > The current driver code performs 512 DMA mappns of a bunch of
> > 32-byte structures. This is silly, as they are all in contiguous
> > memory. Ths patch changes the code to DMA map the entie area
> > with just one call.
> >
> > Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
> > Cc: James K Lewis <jklewis@us.ibm.com>
> > Cc: Arnd Bergmann <arnd@arndb.de>
>
> The others look good, but this one complicates the code and doesn't have any benefit. 20
> for 21 isn't bad.
Hi Joel !
I'm not sure what you mean here.... (especially your 20 to 21 comment).
The patch looks perfectly fine to me, and in fact removes more lines of
code than it adds :)
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH 21/21]: powerpc/cell spidernet DMA coalescing
From: Arnd Bergmann @ 2006-10-11 9:25 UTC (permalink / raw)
To: Geoff Levand
Cc: akpm, jeff, netdev, James K Lewis, linux-kernel, linuxppc-dev
In-Reply-To: <452C4CE0.5010607@am.sony.com>
On Wednesday 11 October 2006 03:46, Geoff Levand wrote:
> >=20
> > The others look good, but this one complicates the code and doesn't hav=
e any benefit. =C2=A020=20
> > for 21 isn't bad.
>=20
> Is the motivation for this change to improve performance by reducing the =
overhead
> of the mapping calls? =C2=A0If so, there may be some benefit for some sys=
tems. =C2=A0Could
> you please elaborate?
>=20
=46rom what I understand, this patch drastically reduces the number of
I/O PTEs that are needed in the iommu. With the current static IOMMU
mapping, it should only make a difference during initialization, but
any platform that uses a dynamic mapping of iommu entries will benefit
a lot from it, because:
=2D the card can do better prefetching of consecutive memory
=2D there are more I/O ptes available for other drivers.
Arnd <><
^ permalink raw reply
* Re: I2C Driver for mpc8272
From: Roman Fietze @ 2006-10-11 9:47 UTC (permalink / raw)
To: linuxppc-embedded
In-Reply-To: <BE8B3EECA608414FB163FBA4576FCEBD88BAAF@EXNY.us.corp.aacisd.com>
[-- Attachment #1: Type: text/plain, Size: 617 bytes --]
Hello Dwayne,
On Tuesday 10 October 2006 22:44, Folden Dwayne wrote:
> Please disregard the last notice, I was informed by my superiors
> that I cannot give this code out.
Then you shouldn't either build a monolithic kernel containing this
code or give your customers access to this code in case it's build
upon any existing GPL'ed code. I hope your superiors know the GPL as
mine do it for a few months now. :)
Roman
--
Roman Fietze Telemotive AG Büro Mühlhausen
Breitwiesen 73347 Mühlhausen
Tel.: +49(0)7335/18493-45 http://www.telemotive.de
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* Re: USB Disk Support...FIXED
From: Jeff Stevens @ 2006-10-11 10:54 UTC (permalink / raw)
To: linuxppc-embedded
For those interested, I figured out the issue. It was an incorrect PCIX PI=
M setting. Even though the comment on the PIM windows that are setup in lu=
an.c (the board specific platform file in the kernel) says 2GB window, the =
actual register setting is only for a 512MB window. I happend to have 1GB =
of memory in my system, and it must have been allocating an address above t=
he 512MB. In the Luan board, I only had 512MB, so that is why it worked th=
ere.=0A=0AMaybe in the next kernel release, the comment should be fixed to =
match the register setting.=0A=0A-Jeff Stevens=0A=0A----- Original Message =
----=0AFrom: Jeff Stevens <jsteve17@yahoo.com>=0ATo: Jeff Stevens <jsteve17=
@yahoo.com>; linuxppc-embedded@ozlabs.org=0ASent: Sunday, October 8, 2006 1=
2:26:17 PM=0ASubject: Re: USB Disk Support=0A=0AI have more information. I=
am using a Phillips=0AISP1562 USB host controller. I ran the same kernel=
=0Aconfig on the actual Luan board (with an ISP1563 PCI=0Aeval board from P=
hillips), and the USB storage works=0Afine. I compared the dmesg from both=
the Luan board=0Aand our 440SP custom system, and here are the=0Adifferenc=
es:=0A=0AThe custom system stops at:=0A...=0Ausb-storage: Command READ_CAPA=
CITY (10 bytes)=0Ausb-storage: 25 00 00 00 00 00 00 00 00 00=0Ausb-storage=
: Bulk Command S 0x43425355 T 0x3 L 8 F 128=0ATrg 0 LUN 0 CL 10=0Ausb-stora=
ge: usb_stor_bulk_transfer_buf: xfer 31 bytes=0Ausb-storage: Status code 0;=
transferred 31/31=0Ausb-storage: -- transfer complete=0Ausb-storage: Bulk =
command transfer result=3D0=0Ausb-storage: usb_stor_bulk_transfer_sglist: x=
fer 8=0Abytes, 1 entries=0Ausb-storage: Status code 0; transferred 8/8=0Aus=
b-storage: -- transfer complete=0Ausb-storage: Bulk data transfer result 0x=
0=0Ausb-storage: Attempting to get CSW...=0Ausb-storage: usb_stor_bulk_tran=
sfer_buf: xfer 13 bytes=0Ausb-storage: command_abort called=0Ausb-storage: =
usb_stor_stop_transport called=0Ausb-storage: -- cancelling URB=0A=0AIt see=
ms to fail on Attempting to get CSW... On the=0ALuan board it gets passed =
this:=0A=0Ausb-storage: Command READ_CAPACITY (10 bytes)=0Ausb-storage: 25=
00 00 00 00 00 00 00 00 00=0Ausb-storage: Bulk Command S 0x43425355 T 0x3 =
L 8 F 128=0ATrg 0 LUN 0 CL 10=0Ausb-storage: usb_stor_bulk_transfer_buf: xf=
er 31 bytes=0Ausb-storage: Status code 0; transferred 31/31=0Ausb-storage: =
-- transfer complete=0Ausb-storage: Bulk command transfer result=3D0=0Ausb-=
storage: usb_stor_bulk_transfer_sglist: xfer 8=0Abytes, 1 entries=0Ausb-sto=
rage: Status code 0; transferred 8/8=0Ausb-storage: -- transfer complete=0A=
usb-storage: Bulk data transfer result 0x0=0Ausb-storage: Attempting to get=
CSW...=0Ausb-storage: usb_stor_bulk_transfer_buf: xfer 13 bytes=0Ausb-stor=
age: Status code 0; transferred 13/13=0Ausb-storage: -- transfer complete=
=0Ausb-storage: Bulk status result =3D 0=0Ausb-storage: Bulk Status S 0x534=
25355 T 0x3 R 0 Stat=0A0x0=0Ausb-storage: scsi cmd done, result=3D0x0=0Ausb=
-storage: *** thread sleeping.=0Ausb-storage: queuecommand called=0Ausb-sto=
rage: *** thread awakened.=0Ausb-storage: Command MODE_SENSE (6 bytes)=0Aus=
b-storage: 1a 00 3f 00 c0 00=0Ausb-storage: Bulk Command S 0x43425355 T 0x=
4 L 192 F=0A128 Trg 0 LUN 0 CL 6=0Ausb-storage: usb_stor_bulk_transfer_buf:=
xfer 31 bytes=0Ausb-storage: Status code 0; transferred 31/31=0A... <conti=
nues>=0A=0ACould this be a noisy usb port? The USB controller=0Aused is th=
e same, the only difference is that on the=0Acustom board, the USB controll=
er is onboard, where as=0Aon the Luan board it is a PCI card. U-boot is al=
so=0Ausing practically the same board specific config file=0Aand board file=
, other than the flash and DDR stuff. =0AOn the custom board, the card read=
er never ends up in=0A/proc/scsi/scsi, but it does on the luan board.=0A=0A=
Thanks,=0A Jeff Stevens=0A=0A=0A--- Jeff Stevens <jsteve17@yahoo.com> wro=
te:=0A=0A> I am having issues getting a uDiskOnChip to mount or=0A> fdisk u=
nder linux. I have a board running U-Boot on=0A> a=0A> AMCC 440SP platform=
. Linux seems to find the=0A> uDiskOnChip fine, however, when I try to fdi=
sk or=0A> mount the device, the console hangs. I have added=0A> SCSI, SCSI=
storage, USB, USB OHCI, USB EHCI, USB=0A> Mass=0A> Storage. Here is my dm=
esg:=0A> =0A> bash-3.00# dmesg | grep -i usb=0A> usbcore: registered new dr=
iver usbfs=0A> usbcore: registered new driver hub=0A> usbmon: debugfs is no=
t available=0A> drivers/usb/core/inode.c: creating file 'devices'=0A> drive=
rs/usb/core/inode.c: creating file '001'=0A> ehci_hcd 0002:02:08.2: new USB=
bus registered,=0A> assigned bus number 1=0A> ehci_hcd 0002:02:08.2: suppo=
rts USB remote wakeup=0A> ehci_hcd 0002:02:08.2: USB 2.0 started, EHCI 0.95=
,=0A> driver 10 Dec 2004=0A> usb usb1: default language 0x0409=0A> usb usb1=
: new device strings: Mfr=3D3, Product=3D2,=0A> SerialNumber=3D1=0A> usb us=
b1: Product: EHCI Host Controller=0A> usb usb1: Manufacturer: Linux 2.6.17.=
9 ehci_hcd=0A> usb usb1: SerialNumber: 0002:02:08.2=0A> usb usb1: configura=
tion #1 chosen from 1 choice=0A> usb usb1: adding 1-0:1.0 (config #1, inter=
face 0)=0A> hub 1-0:1.0: usb_probe_interface=0A> hub 1-0:1.0: usb_probe_int=
erface - got id=0A> hub 1-0:1.0: USB hub found=0A> drivers/usb/core/inode.c=
: creating file '001'=0A> ohci_hcd: 2005 April 22 USB 1.1 'Open' Host=0A> C=
ontroller=0A> (OHCI) Driver (PCI)=0A> drivers/usb/core/inode.c: creating fi=
le '002'=0A> ohci_hcd 0002:02:08.0: new USB bus registered,=0A> assigned bu=
s number 2=0A> usb usb2: default language 0x0409=0A> usb usb2: new device s=
trings: Mfr=3D3, Product=3D2,=0A> SerialNumber=3D1=0A> usb usb2: Product: O=
HCI Host Controller=0A> usb usb2: Manufacturer: Linux 2.6.17.9 ohci_hcd=0A>=
usb usb2: SerialNumber: 0002:02:08.0=0A> usb usb2: configuration #1 chosen=
from 1 choice=0A> usb usb2: adding 2-0:1.0 (config #1, interface 0)=0A> hu=
b 2-0:1.0: usb_probe_interface=0A> hub 2-0:1.0: usb_probe_interface - got i=
d=0A> hub 2-0:1.0: USB hub found=0A> hub 2-0:1.0: no power switching (usb 1=
.0)=0A> usb 1-1: new high speed USB device using ehci_hcd=0A> and=0A> addre=
ss 2=0A> usb 1-1: default language 0x0409=0A> usb 1-1: new device strings: =
Mfr=3D1, Product=3D2,=0A> SerialNumber=3D3=0A> usb 1-1: Product: uDiskOnChi=
p=0A> usb 1-1: Manufacturer: M-Systems=0A> usb 1-1: SerialNumber: 98B0FB510=
031E86E=0A> usb 1-1: configuration #1 chosen from 1 choice=0A> drivers/usb/=
core/inode.c: creating file '001'=0A> drivers/usb/core/inode.c: creating fi=
le '003'=0A> ohci_hcd 0002:02:08.1: new USB bus registered,=0A> assigned bu=
s number 3=0A> usb 1-1: adding 1-1:1.0 (config #1, interface 0)=0A> drivers=
/usb/core/inode.c: creating file '002'=0A> usb usb3: default language 0x040=
9=0A> usb usb3: new device strings: Mfr=3D3, Product=3D2,=0A> SerialNumber=
=3D1=0A> usb usb3: Product: OHCI Host Controller=0A> usb usb3: Manufacturer=
: Linux 2.6.17.9 ohci_hcd=0A> usb usb3: SerialNumber: 0002:02:08.1=0A> usb =
usb3: configuration #1 chosen from 1 choice=0A> usb usb3: adding 3-0:1.0 (c=
onfig #1, interface 0)=0A> hub 3-0:1.0: usb_probe_interface=0A> hub 3-0:1.0=
: usb_probe_interface - got id=0A> hub 3-0:1.0: USB hub found=0A> hub 3-0:1=
.0: no power switching (usb 1.0)=0A> drivers/usb/core/inode.c: creating fil=
e '001'=0A> Initializing USB Mass Storage driver...=0A> usb-storage 1-1:1.0=
: usb_probe_interface=0A> usb-storage 1-1:1.0: usb_probe_interface - got id=
=0A> usb-storage: USB Mass Storage device detected=0A> usb-storage: -- asso=
ciate_dev=0A> usb-storage: Vendor: 0x08ec, Product: 0x1000,=0A> Revision: 0=
x0200=0A> usb-storage: Interface Subclass: 0x06, Protocol:=0A> 0x50=0A> usb=
-storage: Transport: Bulk=0A> usb-storage: Protocol: Transparent SCSI=0A> s=
csi0 : SCSI emulation for USB Mass Storage devices=0A> usb-storage: *** thr=
ead sleeping.=0A> usbcore: registered new driver usb-storage=0A> USB Mass S=
torage support registered.=0A> usb-storage: device found at 2=0A> usb-stora=
ge: waiting for device to settle before=0A> scanning=0A> usb-storage: usb_s=
tor_control_msg: rq=3Dfe rqtype=3Da1=0A> value=3D0000 index=3D00 len=3D1=0A=
> usb-storage: GetMaxLUN command result is 1, data is=0A> 0=0A> usb-storage=
: queuecommand called=0A> usb-storage: *** thread awakened.=0A> usb-storage=
: Command INQUIRY (6 bytes)=0A> usb-storage: 12 00 00 00 24 00=0A> usb-sto=
rage: Bulk Command S 0x43425355 T 0x1 L 36 F=0A> 128 Trg 0 LUN 0 CL 6=0A> u=
sb-storage: usb_stor_bulk_transfer_buf: xfer 31=0A> bytes=0A> usb-storage: =
Status code 0; transferred 31/31=0A> usb-storage: -- transfer complete=0A> =
usb-storage: Bulk command transfer result=3D0=0A> usb-storage: usb_stor_bul=
k_transfer_sglist: xfer 36=0A> bytes, 1 entries=0A> usb-storage: Status cod=
e 0; transferred 36/36=0A> usb-storage: -- transfer complete=0A> usb-storag=
e: Bulk data transfer result 0x0=0A> usb-storage: Attempting to get CSW...=
=0A> usb-storage: usb_stor_bulk_transfer_buf: xfer 13=0A> bytes=0A> usb-sto=
rage: Status code 0; transferred 13/13=0A> usb-storage: -- transfer complet=
e=0A> usb-storage: Bulk status result =3D 0=0A> usb-storage: Bulk Status S =
0x53425355 T 0x1 R 0 Stat=0A> 0x0=0A> usb-storage: scsi cmd done, result=3D=
0x0=0A> usb-storage: *** thread sleeping.=0A> usb-storage: queuecommand cal=
led=0A> usb-storage: *** thread awakened.=0A> usb-storage: Command TEST_UNI=
T_READY (6 bytes)=0A> usb-storage: 00 00 00 00 00 00=0A> usb-storage: Bulk=
Command S 0x43425355 T 0x2 L 0 F 0=0A> Trg 0 LUN 0 CL 6=0A> usb-storage: u=
sb_stor_bulk_transfer_buf: xfer 31=0A> bytes=0A> usb-storage: Status code 0=
; transferred 31/31=0A> usb-storage: -- transfer complete=0A> usb-storage: =
Bulk command transfer result=3D0=0A> usb-storage: Attempting to get CSW...=
=0A> usb-storage: usb_stor_bulk_transfer_buf: xfer 13=0A> bytes=0A> usb-sto=
rage: Status code 0; transferred 13/13=0A> usb-storage: -- transfer complet=
e=0A> usb-storage: Bulk status result =3D 0=0A> usb-storage: Bulk Status S =
0x53425355 T 0x2 R 0 Stat=0A> 0x0=0A> usb-storage: scsi cmd done, result=3D=
0x0=0A> usb-storage: *** thread sleeping.=0A> usb-storage: queuecommand cal=
led=0A> usb-storage: *** thread awakened.=0A> usb-storage: Command READ_CAP=
ACITY (10 bytes)=0A> usb-storage: 25 00 00 00 00 00 00 00 00 00=0A> usb-st=
orage: Bulk Command S 0x43425355 T 0x3 L 8 F=0A> 128=0A> Trg 0 LUN 0 CL 10=
=0A> usb-storage: usb_stor_bulk_transfer_buf: xfer 31=0A> bytes=0A> usb-sto=
rage: Status code 0; transferred 31/31=0A> usb-storage: -- transfer complet=
e=0A> usb-storage: Bulk command transfer result=3D0=0A> usb-storage: usb_st=
or_bulk_transfer_sglist: xfer 8=0A> bytes, 1 entries=0A> usb-storage: Statu=
s code 0; transferred 8/8=0A> usb-storage: -- transfer complete=0A> usb-sto=
rage: Bulk data transfer result 0x0=0A> usb-storage: Attempting to get CSW.=
..=0A> usb-storage: usb_stor_bulk_transfer_buf: xfer 13=0A> bytes=0A> usb-s=
torage: command_abort called=0A> usb-storage: usb_stor_stop_transport calle=
d=0A> usb-storage: -- cancelling URB=0A> =0A> =0A>=0A----------------------=
---------------------------------=0A> And a few other things:=0A> =0A> bash=
-3.00# cat /proc/bus/usb/devices=0A> =0A> T: Bus=3D03 Lev=3D00 Prnt=3D00 P=
ort=3D00 Cnt=3D00 Dev#=3D 1=0A> Spd=3D12 MxCh=3D 1=0A> B: Alloc=3D 0/90=
0 us ( 0%), #Int=3D 0, #Iso=3D 0=0A> D: Ver=3D 1.10 Cls=3D09(hub ) Sub=
=3D00 Prot=3D00 MxPS=3D64=0A> #Cfgs=3D 1=0A> P: Vendor=3D0000 ProdID=3D00=
00 Rev=3D 2.06=0A> S: Manufacturer=3DLinux 2.6.17.9 ohci_hcd=0A> S: Produ=
ct=3DOHCI Host Controller=0A> S: SerialNumber=3D0002:02:08.1=0A> C:* #Ifs=
=3D 1 Cfg#=3D 1 Atr=3De0 MxPwr=3D 0mA=0A> I: If#=3D 0 Alt=3D 0 #EPs=3D 1 =
Cls=3D09(hub ) Sub=3D00=0A> Prot=3D00=0A> Driver=3Dhub=0A> E: Ad=3D81(I) =
Atr=3D03(Int.) MxPS=3D 2 Ivl=3D255ms=0A> =0A> T: Bus=3D02 Lev=3D00 Prnt=
=3D00 Port=3D00 Cnt=3D00 Dev#=3D 1=0A> Spd=3D12 MxCh=3D 1=0A> B: Alloc=
=3D 0/900 us ( 0%), #Int=3D 0, #Iso=3D 0=0A> D: Ver=3D 1.10 Cls=3D09(hu=
b ) Sub=3D00 Prot=3D00 MxPS=3D64=0A> #Cfgs=3D 1=0A> P: Vendor=3D0000 Pro=
dID=3D0000 Rev=3D 2.06=0A> S: Manufacturer=3DLinux 2.6.17.9 ohci_hcd=0A> S=
: Product=3DOHCI Host Controller=0A> S: SerialNumber=3D0002:02:08.0=0A> C=
:* #Ifs=3D 1 Cfg#=3D 1 Atr=3De0 MxPwr=3D 0mA=0A> I: If#=3D 0 Alt=3D 0 #EP=
s=3D 1 Cls=3D09(hub ) Sub=3D00=0A> Prot=3D00=0A> Driver=3Dhub=0A> E: Ad=
=3D81(I) Atr=3D03(Int.) MxPS=3D 2 Ivl=3D255ms=0A> =0A> T: Bus=3D01 Lev=
=3D00 Prnt=3D00 Port=3D00 Cnt=3D00 Dev#=3D 1=0A> Spd=3D480 MxCh=3D 2=0A> B=
: Alloc=3D 0/800 us ( 0%), #Int=3D 0, #Iso=3D 0=0A> D: Ver=3D 2.00 Cls=
=3D09(hub ) Sub=3D00 Prot=3D01 MxPS=3D64=0A> #Cfgs=3D 1=0A> P: Vendor=3D=
0000 ProdID=3D0000 Rev=3D 2.06=0A> S: Manufacturer=3DLinux 2.6.17.9 ehci_h=
cd=0A> S: Product=3DEHCI Host Controller=0A> S: SerialNumber=3D0002:02:08=
.2=0A> C:* #Ifs=3D 1 Cfg#=3D 1 Atr=3De0 MxPwr=3D 0mA=0A> I: If#=3D 0 Alt=
=3D 0 #EPs=3D 1 Cls=3D09(hub ) Sub=3D00=0A> Prot=3D00=0A> Driver=3Dhub=0A>=
E: Ad=3D81(I) Atr=3D03(Int.) MxPS=3D 2 Ivl=3D256ms=0A> =0A> T: Bus=3D0=
1 Lev=3D01 Prnt=3D01 Port=3D00 Cnt=3D01 Dev#=3D 2=0A> Spd=3D480 MxCh=3D 0=
=0A> D: Ver=3D 2.00 Cls=3D00(>ifc ) Sub=3D00 Prot=3D00 MxPS=3D64=0A> #Cfgs=
=3D 1=0A> P: Vendor=3D08ec ProdID=3D1000 Rev=3D 2.00=0A> S: Manufacturer=
=3DM-Systems=0A> S: Product=3DuDiskOnChip=0A> S: SerialNumber=3D98B0FB510=
031E86E=0A> C:* #Ifs=3D 1 Cfg#=3D 1 Atr=3D80 MxPwr=3D140mA=0A> I: If#=3D 0=
Alt=3D 0 #EPs=3D 2 Cls=3D08(stor.) Sub=3D06=0A> Prot=3D50=0A> Driver=3Dusb=
-storage=0A> E: Ad=3D81(I) Atr=3D02(Bulk) MxPS=3D 512 Ivl=3D0ms=0A> E: Ad=
=3D02(O) Atr=3D02(Bulk) MxPS=3D 512 Ivl=3D0ms=0A> =0A> bash-3.00# cat /proc=
/scsi/scsi=0A> Attached devices:=0A> =0A> =0A> It's probably just a kernel =
config issue, but I'm=0A> not=0A> sure what else to try. I would appreciat=
e any=0A> input!=0A> =0A> Thanks,=0A> Jeff=0A> =0A> ____________________=
______________________________=0A> Do You Yahoo!?=0A> Tired of spam? Yahoo=
! Mail has the best spam=0A> protection around =0A> http://mail.yahoo.com =
=0A> _______________________________________________=0A> Linuxppc-embedded =
mailing list=0A> Linuxppc-embedded@ozlabs.org=0A>=0Ahttps://ozlabs.org/mail=
man/listinfo/linuxppc-embedded=0A> =0A=0A=0A_______________________________=
___________________=0ADo You Yahoo!?=0ATired of spam? Yahoo! Mail has the =
best spam protection around =0Ahttp://mail.yahoo.com =0A=0A=0A=0A=0A
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox