2003-03-24 16:34:37

by Dave Jones

[permalink] [raw]
Subject: cyclades region handling updates from 2.4

diff -urpN --exclude-from=/home/davej/.exclude bk-linus/drivers/char/cyclades.c linux-2.5/drivers/char/cyclades.c
--- bk-linus/drivers/char/cyclades.c 2003-03-08 09:56:57.000000000 +0000
+++ linux-2.5/drivers/char/cyclades.c 2003-03-17 23:42:15.000000000 +0000
@@ -12,7 +12,7 @@ static char rcsid[] =
*
* Initially written by Randolph Bentson <[email protected]>.
* Modified and maintained by Marcio Saito <[email protected]>.
- * Currently maintained by Henrique Gobbi <[email protected]>.
+ * Currently maintained by Ivan Passos <[email protected]>.
*
* For Technical support and installation problems, please send e-mail
* to [email protected].
@@ -883,7 +883,9 @@ static void cyz_poll(unsigned long);
static long cyz_polling_cycle = CZ_DEF_POLL;

static int cyz_timeron = 0;
-static struct timer_list cyz_timerlist = TIMER_INITIALIZER(cyz_poll, 0, 0);
+static struct timer_list cyz_timerlist = {
+ .function = cyz_poll
+};

#else /* CONFIG_CYZ_INTR */
static void cyz_rx_restart(unsigned long);
@@ -4944,17 +4946,16 @@ cy_detect_pci(void)

struct pci_dev *pdev = NULL;
unsigned char cyy_rev_id;
- unsigned char cy_pci_irq = 0;
- uclong cy_pci_phys0, cy_pci_phys1, cy_pci_phys2;
+ unsigned char cy_pci_irq = 0;
+ uclong cy_pci_phys0, cy_pci_phys2;
uclong cy_pci_addr0, cy_pci_addr2;
- unsigned short i,j,cy_pci_nchan, plx_ver;
- unsigned short device_id,dev_index = 0;
+ unsigned short i,j,cy_pci_nchan, plx_ver;
+ unsigned short device_id,dev_index = 0;
uclong mailbox;
uclong Ze_addr0[NR_CARDS], Ze_addr2[NR_CARDS], ZeIndex = 0;
uclong Ze_phys0[NR_CARDS], Ze_phys2[NR_CARDS];
- unsigned char Ze_irq[NR_CARDS];
- struct resource *resource;
- unsigned long res_start, res_len;
+ unsigned char Ze_irq[NR_CARDS];
+ struct pci_dev *Ze_pdev[NR_CARDS];

for (i = 0; i < NR_CARDS; i++) {
/* look for a Cyclades card by vendor and device id */
@@ -4976,7 +4977,6 @@ cy_detect_pci(void)
/* read PCI configuration area */
cy_pci_irq = pdev->irq;
cy_pci_phys0 = pci_resource_start(pdev, 0);
- cy_pci_phys1 = pci_resource_start(pdev, 1);
cy_pci_phys2 = pci_resource_start(pdev, 2);
pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id);

@@ -5002,15 +5002,10 @@ cy_detect_pci(void)
/* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems
with other drivers accessing it. */
- resource = request_region(cy_pci_phys1,
- CyPCI_Yctl, "Cyclom-Y");
- if (resource == NULL) {
- printk(KERN_ERR "cyclades: failed to allocate IO "
- "resource at 0x%lx\n", cy_pci_phys1);
+ if (pci_request_regions(pdev, "Cyclom-Y") != 0) {
+ printk(KERN_ERR "cyclades: failed to reserve PCI resources\n");
continue;
}
- res_start = cy_pci_phys1;
- res_len = CyPCI_Yctl;

#if defined(__alpha__)
if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) { /* below 1M? */
@@ -5081,10 +5076,7 @@ cy_detect_pci(void)
cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = cy_pci_nchan/4;
- cy_card[j].resource = resource;
- cy_card[j].res_start = res_start;
- cy_card[j].res_len = res_len;
- resource = NULL; /* For next card */
+ cy_card[j].pdev = pdev;

/* enable interrupts in the PCI interface */
plx_ver = cy_readb(cy_pci_addr2 + CyPLX_VER) & 0x0f;
@@ -5164,15 +5156,10 @@ cy_detect_pci(void)
/* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems
with other drivers accessing it. */
- resource = request_region(cy_pci_phys1,
- CyPCI_Zctl, "Cyclades-Z");
- if (resource == NULL) {
- printk(KERN_ERR "cyclades: failed ot allocate IO resource "
- "at 0x%lx\n", cy_pci_phys1);
+ if (pci_request_regions(pdev, "Cyclades-Z") != 0) {
+ printk(KERN_ERR "cyclades: failed to reserve PCI resources\n");
continue;
}
- res_start = cy_pci_phys1;
- res_len = CyPCI_Zctl;

if (mailbox == ZE_V1) {
cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win);
@@ -5187,6 +5174,7 @@ cy_detect_pci(void)
Ze_addr0[ZeIndex] = cy_pci_addr0;
Ze_addr2[ZeIndex] = cy_pci_addr2;
Ze_irq[ZeIndex] = cy_pci_irq;
+ Ze_pdev[ZeIndex] = pdev;
ZeIndex++;
}
i--;
@@ -5271,10 +5259,7 @@ cy_detect_pci(void)
cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1;
- cy_card[j].resource = resource;
- cy_card[j].res_start = res_start;
- cy_card[j].res_len = res_len;
- resource = NULL; /* For next card */
+ cy_card[j].pdev = pdev;

/* print message */
#ifdef CONFIG_CYZ_INTR
@@ -5302,12 +5287,14 @@ cy_detect_pci(void)
cy_pci_addr0 = Ze_addr0[0];
cy_pci_addr2 = Ze_addr2[0];
cy_pci_irq = Ze_irq[0];
+ pdev = Ze_pdev[0];
for (j = 0 ; j < ZeIndex-1 ; j++) {
Ze_phys0[j] = Ze_phys0[j+1];
Ze_phys2[j] = Ze_phys2[j+1];
Ze_addr0[j] = Ze_addr0[j+1];
Ze_addr2[j] = Ze_addr2[j+1];
Ze_irq[j] = Ze_irq[j+1];
+ Ze_pdev[j] = Ze_pdev[j+1];
}
ZeIndex--;
mailbox = (uclong)cy_readl(&((struct RUNTIME_9060 *)
@@ -5365,6 +5352,7 @@ cy_detect_pci(void)
cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1;
+ cy_card[j].pdev = pdev;

/* print message */
#ifdef CONFIG_CYZ_INTR
@@ -5797,8 +5785,8 @@ cy_cleanup_module(void)
#endif /* CONFIG_CYZ_INTR */
)
free_irq(cy_card[i].irq, &cy_card[i]);
- if (cy_card[i].resource)
- release_region(cy_card[i].res_start, cy_card[i].res_len);
+ if (cy_card[i].pdev)
+ pci_release_regions(cy_card[i].pdev);
}
}
if (tmp_buf) {
diff -urpN --exclude-from=/home/davej/.exclude bk-linus/include/linux/cyclades.h linux-2.5/include/linux/cyclades.h
--- bk-linus/include/linux/cyclades.h 2003-03-08 09:57:57.000000000 +0000
+++ linux-2.5/include/linux/cyclades.h 2003-03-08 07:24:39.000000000 +0000
@@ -515,9 +515,7 @@ struct cyclades_card {
int nports; /* Number of ports in the card */
int bus_index; /* address shift - 0 for ISA, 1 for PCI */
int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */
- struct resource *resource;
- unsigned long res_start;
- unsigned long res_len;
+ struct pci_dev *pdev;
#ifdef __KERNEL__
spinlock_t card_lock;
#else


2003-03-24 17:46:35

by Henrique Oliveira

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

Hello,

What is this patch for ? How extensively did you test it.
This driver is working and I don't wanna it broken. There are too many
customers counting on it.

Another thing. Why do you want to put Ivan Passos as the maintainer ? I
talk to him everyday and I know he is not, and he doesn't want to be,
the maintainer of the driver.

kind regards
Henrique
cyclades.c maintainer


[email protected] wrote:
> diff -urpN --exclude-from=/home/davej/.exclude bk-linus/drivers/char/cyclades.c linux-2.5/drivers/char/cyclades.c
> --- bk-linus/drivers/char/cyclades.c 2003-03-08 09:56:57.000000000 +0000
> +++ linux-2.5/drivers/char/cyclades.c 2003-03-17 23:42:15.000000000 +0000
> @@ -12,7 +12,7 @@ static char rcsid[] =
> *
> * Initially written by Randolph Bentson <[email protected]>.
> * Modified and maintained by Marcio Saito <[email protected]>.
> - * Currently maintained by Henrique Gobbi <[email protected]>.
> + * Currently maintained by Ivan Passos <[email protected]>.
> *
> * For Technical support and installation problems, please send e-mail
> * to [email protected].
> @@ -883,7 +883,9 @@ static void cyz_poll(unsigned long);
> static long cyz_polling_cycle = CZ_DEF_POLL;
>
> static int cyz_timeron = 0;
> -static struct timer_list cyz_timerlist = TIMER_INITIALIZER(cyz_poll, 0, 0);
> +static struct timer_list cyz_timerlist = {
> + .function = cyz_poll
> +};
>
> #else /* CONFIG_CYZ_INTR */
> static void cyz_rx_restart(unsigned long);
> @@ -4944,17 +4946,16 @@ cy_detect_pci(void)
>
> struct pci_dev *pdev = NULL;
> unsigned char cyy_rev_id;
> - unsigned char cy_pci_irq = 0;
> - uclong cy_pci_phys0, cy_pci_phys1, cy_pci_phys2;
> + unsigned char cy_pci_irq = 0;
> + uclong cy_pci_phys0, cy_pci_phys2;
> uclong cy_pci_addr0, cy_pci_addr2;
> - unsigned short i,j,cy_pci_nchan, plx_ver;
> - unsigned short device_id,dev_index = 0;
> + unsigned short i,j,cy_pci_nchan, plx_ver;
> + unsigned short device_id,dev_index = 0;
> uclong mailbox;
> uclong Ze_addr0[NR_CARDS], Ze_addr2[NR_CARDS], ZeIndex = 0;
> uclong Ze_phys0[NR_CARDS], Ze_phys2[NR_CARDS];
> - unsigned char Ze_irq[NR_CARDS];
> - struct resource *resource;
> - unsigned long res_start, res_len;
> + unsigned char Ze_irq[NR_CARDS];
> + struct pci_dev *Ze_pdev[NR_CARDS];
>
> for (i = 0; i < NR_CARDS; i++) {
> /* look for a Cyclades card by vendor and device id */
> @@ -4976,7 +4977,6 @@ cy_detect_pci(void)
> /* read PCI configuration area */
> cy_pci_irq = pdev->irq;
> cy_pci_phys0 = pci_resource_start(pdev, 0);
> - cy_pci_phys1 = pci_resource_start(pdev, 1);
> cy_pci_phys2 = pci_resource_start(pdev, 2);
> pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id);
>
> @@ -5002,15 +5002,10 @@ cy_detect_pci(void)
> /* Although we don't use this I/O region, we should
> request it from the kernel anyway, to avoid problems
> with other drivers accessing it. */
> - resource = request_region(cy_pci_phys1,
> - CyPCI_Yctl, "Cyclom-Y");
> - if (resource == NULL) {
> - printk(KERN_ERR "cyclades: failed to allocate IO "
> - "resource at 0x%lx\n", cy_pci_phys1);
> + if (pci_request_regions(pdev, "Cyclom-Y") != 0) {
> + printk(KERN_ERR "cyclades: failed to reserve PCI resources\n");
> continue;
> }
> - res_start = cy_pci_phys1;
> - res_len = CyPCI_Yctl;
>
> #if defined(__alpha__)
> if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) { /* below 1M? */
> @@ -5081,10 +5076,7 @@ cy_detect_pci(void)
> cy_card[j].bus_index = 1;
> cy_card[j].first_line = cy_next_channel;
> cy_card[j].num_chips = cy_pci_nchan/4;
> - cy_card[j].resource = resource;
> - cy_card[j].res_start = res_start;
> - cy_card[j].res_len = res_len;
> - resource = NULL; /* For next card */
> + cy_card[j].pdev = pdev;
>
> /* enable interrupts in the PCI interface */
> plx_ver = cy_readb(cy_pci_addr2 + CyPLX_VER) & 0x0f;
> @@ -5164,15 +5156,10 @@ cy_detect_pci(void)
> /* Although we don't use this I/O region, we should
> request it from the kernel anyway, to avoid problems
> with other drivers accessing it. */
> - resource = request_region(cy_pci_phys1,
> - CyPCI_Zctl, "Cyclades-Z");
> - if (resource == NULL) {
> - printk(KERN_ERR "cyclades: failed ot allocate IO resource "
> - "at 0x%lx\n", cy_pci_phys1);
> + if (pci_request_regions(pdev, "Cyclades-Z") != 0) {
> + printk(KERN_ERR "cyclades: failed to reserve PCI resources\n");
> continue;
> }
> - res_start = cy_pci_phys1;
> - res_len = CyPCI_Zctl;
>
> if (mailbox == ZE_V1) {
> cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win);
> @@ -5187,6 +5174,7 @@ cy_detect_pci(void)
> Ze_addr0[ZeIndex] = cy_pci_addr0;
> Ze_addr2[ZeIndex] = cy_pci_addr2;
> Ze_irq[ZeIndex] = cy_pci_irq;
> + Ze_pdev[ZeIndex] = pdev;
> ZeIndex++;
> }
> i--;
> @@ -5271,10 +5259,7 @@ cy_detect_pci(void)
> cy_card[j].bus_index = 1;
> cy_card[j].first_line = cy_next_channel;
> cy_card[j].num_chips = -1;
> - cy_card[j].resource = resource;
> - cy_card[j].res_start = res_start;
> - cy_card[j].res_len = res_len;
> - resource = NULL; /* For next card */
> + cy_card[j].pdev = pdev;
>
> /* print message */
> #ifdef CONFIG_CYZ_INTR
> @@ -5302,12 +5287,14 @@ cy_detect_pci(void)
> cy_pci_addr0 = Ze_addr0[0];
> cy_pci_addr2 = Ze_addr2[0];
> cy_pci_irq = Ze_irq[0];
> + pdev = Ze_pdev[0];
> for (j = 0 ; j < ZeIndex-1 ; j++) {
> Ze_phys0[j] = Ze_phys0[j+1];
> Ze_phys2[j] = Ze_phys2[j+1];
> Ze_addr0[j] = Ze_addr0[j+1];
> Ze_addr2[j] = Ze_addr2[j+1];
> Ze_irq[j] = Ze_irq[j+1];
> + Ze_pdev[j] = Ze_pdev[j+1];
> }
> ZeIndex--;
> mailbox = (uclong)cy_readl(&((struct RUNTIME_9060 *)
> @@ -5365,6 +5352,7 @@ cy_detect_pci(void)
> cy_card[j].bus_index = 1;
> cy_card[j].first_line = cy_next_channel;
> cy_card[j].num_chips = -1;
> + cy_card[j].pdev = pdev;
>
> /* print message */
> #ifdef CONFIG_CYZ_INTR
> @@ -5797,8 +5785,8 @@ cy_cleanup_module(void)
> #endif /* CONFIG_CYZ_INTR */
> )
> free_irq(cy_card[i].irq, &cy_card[i]);
> - if (cy_card[i].resource)
> - release_region(cy_card[i].res_start, cy_card[i].res_len);
> + if (cy_card[i].pdev)
> + pci_release_regions(cy_card[i].pdev);
> }
> }
> if (tmp_buf) {
> diff -urpN --exclude-from=/home/davej/.exclude bk-linus/include/linux/cyclades.h linux-2.5/include/linux/cyclades.h
> --- bk-linus/include/linux/cyclades.h 2003-03-08 09:57:57.000000000 +0000
> +++ linux-2.5/include/linux/cyclades.h 2003-03-08 07:24:39.000000000 +0000
> @@ -515,9 +515,7 @@ struct cyclades_card {
> int nports; /* Number of ports in the card */
> int bus_index; /* address shift - 0 for ISA, 1 for PCI */
> int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */
> - struct resource *resource;
> - unsigned long res_start;
> - unsigned long res_len;
> + struct pci_dev *pdev;
> #ifdef __KERNEL__
> spinlock_t card_lock;
> #else
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>



--
regards
--
Henrique Gobbi
Software Engineer

Cyclades Corporation
41829 Albrae St
Fremont, CA 94538

2003-03-24 17:51:24

by Dave Jones

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

On Mon, Mar 24, 2003 at 09:55:02AM +0000, Henrique Gobbi wrote:

> What is this patch for ?

it's a forward port of a set of fixes that already went into 2.4

> How extensively did you test it.

-ENOHARDWARE.

> This driver is working and I don't wanna it broken. There are too many
> customers counting on it.

if you have customers depending on 2.5 right now, you have bigger problems.
Note this is only stuff that has already been merged into 2.4

> Another thing. Why do you want to put Ivan Passos as the maintainer ? I
> talk to him everyday and I know he is not, and he doesn't want to be,
> the maintainer of the driver.

Ok, so that part needs updating. Apologies.

Dave

2003-03-24 18:02:30

by Henrique Oliveira

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

> > How extensively did you test it.
>
> -ENOHARDWARE.
>
> > This driver is working and I don't wanna it broken. There are too many
> > customers counting on it.
>
> if you have customers depending on 2.5 right now, you have bigger problems.
> Note this is only stuff that has already been merged into 2.4

No, there's no customers using 2.5. But there's a lot of them using 2.4.
Let's do like this. I'll test your patch and, if it works, Marcelo can
merge it into the oficial 2.4.x tree.

regards
Henrique

2003-03-24 18:17:05

by Dave Jones

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

<linus taken out of cc>

On Mon, Mar 24, 2003 at 10:11:43AM +0000, Henrique Gobbi wrote:

> >if you have customers depending on 2.5 right now, you have bigger problems.
> >Note this is only stuff that has already been merged into 2.4
>
> No, there's no customers using 2.5. But there's a lot of them using 2.4.
> Let's do like this. I'll test your patch and, if it works, Marcelo can
> merge it into the oficial 2.4.x tree.

I think you've completley misunderstood whats going on.
This patch _already_ went into 2.4
I've forward ported the fixes to 2.5, and sent these on.
There is nothing to do here for 2.4

Dave

2003-03-24 18:35:21

by Henrique Gobbi

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

Hello,

> I think you've completley misunderstood whats going on.

Looks like I have :)

> This patch _already_ went into 2.4

So what 2.4 kernel version has this patch ?

regards
henrique

On Mon, 2003-03-24 at 10:28, Dave Jones wrote:
> <linus taken out of cc>
>
> On Mon, Mar 24, 2003 at 10:11:43AM +0000, Henrique Gobbi wrote:
>
> > >if you have customers depending on 2.5 right now, you have bigger problems.
> > >Note this is only stuff that has already been merged into 2.4
> >
> > No, there's no customers using 2.5. But there's a lot of them using 2.4.
> > Let's do like this. I'll test your patch and, if it works, Marcelo can
> > merge it into the oficial 2.4.x tree.
>
> I think you've completley misunderstood whats going on.
> This patch _already_ went into 2.4
> I've forward ported the fixes to 2.5, and sent these on.
> There is nothing to do here for 2.4


2003-03-24 19:02:33

by Dave Jones

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

On Mon, Mar 24, 2003 at 10:49:37AM -0800, Henrique Gobbi wrote:

> > This patch _already_ went into 2.4
> So what 2.4 kernel version has this patch ?

According to bitkeeper, patch was merged on 20th November 2002,
so 2.4.20 (28th Nov), and all subsequent .21pre's.

Dave

2003-03-24 20:22:21

by Andrew Morton

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

[email protected] wrote:
>
> -static struct timer_list cyz_timerlist = TIMER_INITIALIZER(cyz_poll, 0, 0);
> +static struct timer_list cyz_timerlist = {
> + .function = cyz_poll
> +};

errr, bit of regression there. The spinlock in the timer is no longer
initialised.

2003-03-24 20:31:59

by Dave Jones

[permalink] [raw]
Subject: Re: cyclades region handling updates from 2.4

On Mon, Mar 24, 2003 at 02:37:58PM -0800, Andrew Morton wrote:
> [email protected] wrote:
> >
> > -static struct timer_list cyz_timerlist = TIMER_INITIALIZER(cyz_poll, 0, 0);
> > +static struct timer_list cyz_timerlist = {
> > + .function = cyz_poll
> > +};
>
> errr, bit of regression there. The spinlock in the timer is no longer
> initialised.

erk, bad merge on my part after your initial fix there.
I'll send a backout patch along with the bit putting the maintainers
name right.

Dave