Re: [patch 12/26] g_NCR5380: fix broken MMIO compilation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday 25 May 2010 02:16:55 Andy Walls wrote:
> On Mon, 2010-05-24 at 12:22 -0700, akpm@xxxxxxxxxxxxxxxxxxxx wrote:
> > From: Ondrej Zary <linux@xxxxxxxxxxxxxxxxxxxx>
> >
> > The ifdefs are broken so the MMIO code is never compiled and so it's
> > broken too.  Fix them all.  Untested as I don't have the hardware.
> >
> > Signed-off-by: Ondrej Zary <linux@xxxxxxxxxxxxxxxxxxxx>
> > Cc: Andy Walls <awalls@xxxxxxxxx>
> > Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
>
> I remeber inspecting this before and thinking they were fine.
>
> Reviewed-by: Andy Walls <awalls@xxxxxxxxxxxxxxxx>
> (my awalls@xxxxxxxxx account is obsolete)
>
> If anyone in the US is interested in ancient ISA bus SCSI hardware for
> NCR5380 driver development, I can send them:
>
> 1. a DTC3181E
> 	NCR5380
> 	ISA I/O ports
> 	no IRQ
> 	no Pseudo-DMA
> 	DB-25 external connector
> 	...definitely a piece of junk.
>
> 2. a SUMO SCSI AT
> 	NCR5380
> 	ISA I/O ports
> 	IRQ is is enabled by a bit in a board specific reg at reg_base+8
> 	Pseudo DMA is enabled by a a board specific reg at reg_base+8
> 	No watchdog timer on the pseudo DMA, so a failed pseudo-DMA
> 		can hang your whole machine :D
> 	SCSI-1 external connector (Centronics-type with bail locks)
> 	Internal SCSI connector
> 	Removeable terminating resistors for the card.
> 	Two BIOS firmware images on board, each having a divide by
> 		0 bug in their fake C/H/S drive geometry computations :D
> 	...in general, also a piece of junk.
>
> Neither of them will help with testing the MMIO mode of the driver.

I actually have a memory-mapped card - Canon FG2-5202 (hardwired to IRQ7). It 
did not work for me. But the other (I/O) mapped cards do neither. They seem 
to work if there's no SCSI device connected but I was not able to get neither 
IBM DORS-32160 hard disk nor SONY CDU415 CD-ROM working.

The driver hangs the machine completely because it waits for timeout using 
time_before with interrupts disabled - e.g. in NCR5380_poll_politely() in 
drivers/scsi/NCR5380.c.

Tried older kernels to find when did it work last time - and found none! 2.4 
kernels were able to at least display device name and firmware version. Maybe 
I should try some older CPU & motherboard (this was on a P3, IIRC).

> Regards,
> Andy
>
> > ---
> >
> >  drivers/scsi/g_NCR5380.c |   43 +++++++++++++++++++------------------
> >  drivers/scsi/g_NCR5380.h |    6 ++---
> >  2 files changed, 26 insertions(+), 23 deletions(-)
> >
> > diff -puN drivers/scsi/g_NCR5380.c~g_ncr5380-fix-broken-mmio-compilation
> > drivers/scsi/g_NCR5380.c ---
> > a/drivers/scsi/g_NCR5380.c~g_ncr5380-fix-broken-mmio-compilation +++
> > a/drivers/scsi/g_NCR5380.c
> > @@ -285,9 +285,12 @@ static int __init do_DTC3181E_setup(char
> >  int __init generic_NCR5380_detect(struct scsi_host_template * tpnt)
> >  {
> >  	static int current_override = 0;
> > -	int count, i;
> > +	int count;
> >  	unsigned int *ports;
> > +#ifndef SCSI_G_NCR5380_MEM
> > +	int i;
> >  	unsigned long region_size = 16;
> > +#endif
> >  	static unsigned int __initdata ncr_53c400a_ports[] = {
> >  		0x280, 0x290, 0x300, 0x310, 0x330, 0x340, 0x348, 0x350, 0
> >  	};
> > @@ -296,7 +299,7 @@ int __init generic_NCR5380_detect(struct
> >  	};
> >  	int flags = 0;
> >  	struct Scsi_Host *instance;
> > -#ifdef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifdef SCSI_G_NCR5380_MEM
> >  	unsigned long base;
> >  	void __iomem *iomem;
> >  #endif
> > @@ -315,7 +318,7 @@ int __init generic_NCR5380_detect(struct
> >  		overrides[0].board = BOARD_NCR53C400A;
> >  	else if (dtc_3181e != NCR_NOT_SET)
> >  		overrides[0].board = BOARD_DTC3181E;
> > -
> > +#ifndef SCSI_G_NCR5380_MEM
> >  	if (!current_override && isapnp_present()) {
> >  		struct pnp_dev *dev = NULL;
> >  		count = 0;
> > @@ -347,7 +350,7 @@ int __init generic_NCR5380_detect(struct
> >  			count++;
> >  		}
> >  	}
> > -
> > +#endif
> >  	tpnt->proc_name = "g_NCR5380";
> >
> >  	for (count = 0; current_override < NO_OVERRIDES; ++current_override) {
> > @@ -372,7 +375,7 @@ int __init generic_NCR5380_detect(struct
> >  			break;
> >  		}
> >
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  		if (ports) {
> >  			/* wakeup sequence for the NCR53C400A and DTC3181E */
> >
> > @@ -434,7 +437,7 @@ int __init generic_NCR5380_detect(struct
> >  #endif
> >  		instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
> >  		if (instance == NULL) {
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  			release_region(overrides[current_override].NCR5380_map_name,
> > region_size); #else
> >  			iounmap(iomem);
> > @@ -444,10 +447,10 @@ int __init generic_NCR5380_detect(struct
> >  		}
> >
> >  		instance->NCR5380_instance_name =
> > overrides[current_override].NCR5380_map_name; -#ifndef
> > CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  		instance->n_io_port = region_size;
> >  #else
> > -		((struct NCR5380_hostdata *)instance->hostdata).iomem = iomem;
> > +		((struct NCR5380_hostdata *)instance->hostdata)->iomem = iomem;
> >  #endif
> >
> >  		NCR5380_init(instance, flags);
> > @@ -515,10 +518,10 @@ int generic_NCR5380_release_resources(st
> >  		free_irq(instance->irq, instance);
> >  	NCR5380_exit(instance);
> >
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  	release_region(instance->NCR5380_instance_name, instance->n_io_port);
> >  #else
> > -	iounmap(((struct NCR5380_hostdata *)instance->hostdata).iomem);
> > +	iounmap(((struct NCR5380_hostdata *)instance->hostdata)->iomem);
> >  	release_mem_region(instance->NCR5380_instance_name,
> > NCR5380_region_size); #endif
> >
> > @@ -588,14 +591,14 @@ static inline int NCR5380_pread(struct S
> >  		}
> >  		while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY);
> >
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  		{
> >  			int i;
> >  			for (i = 0; i < 128; i++)
> >  				dst[start + i] = NCR5380_read(C400_HOST_BUFFER);
> >  		}
> >  #else
> > -		/* implies CONFIG_SCSI_G_NCR5380_MEM */
> > +		/* implies SCSI_G_NCR5380_MEM */
> >  		memcpy_fromio(dst + start, iomem + NCR53C400_host_buffer, 128);
> >  #endif
> >  		start += 128;
> > @@ -608,14 +611,14 @@ static inline int NCR5380_pread(struct S
> >  			// FIXME - no timeout
> >  		}
> >
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  		{
> >  			int i;
> >  			for (i = 0; i < 128; i++)
> >  				dst[start + i] = NCR5380_read(C400_HOST_BUFFER);
> >  		}
> >  #else
> > -		/* implies CONFIG_SCSI_G_NCR5380_MEM */
> > +		/* implies SCSI_G_NCR5380_MEM */
> >  		memcpy_fromio(dst + start, iomem + NCR53C400_host_buffer, 128);
> >  #endif
> >  		start += 128;
> > @@ -674,13 +677,13 @@ static inline int NCR5380_pwrite(struct
> >  		}
> >  		while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
> >  			; // FIXME - timeout
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  		{
> >  			for (i = 0; i < 128; i++)
> >  				NCR5380_write(C400_HOST_BUFFER, src[start + i]);
> >  		}
> >  #else
> > -		/* implies CONFIG_SCSI_G_NCR5380_MEM */
> > +		/* implies SCSI_G_NCR5380_MEM */
> >  		memcpy_toio(iomem + NCR53C400_host_buffer, src + start, 128);
> >  #endif
> >  		start += 128;
> > @@ -690,13 +693,13 @@ static inline int NCR5380_pwrite(struct
> >  		while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
> >  			; // FIXME - no timeout
> >
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >  		{
> >  			for (i = 0; i < 128; i++)
> >  				NCR5380_write(C400_HOST_BUFFER, src[start + i]);
> >  		}
> >  #else
> > -		/* implies CONFIG_SCSI_G_NCR5380_MEM */
> > +		/* implies SCSI_G_NCR5380_MEM */
> >  		memcpy_toio(iomem + NCR53C400_host_buffer, src + start, 128);
> >  #endif
> >  		start += 128;
> > @@ -936,7 +939,7 @@ module_param(ncr_53c400a, int, 0);
> >  module_param(dtc_3181e, int, 0);
> >  MODULE_LICENSE("GPL");
> >
> > -
> > +#ifndef SCSI_G_NCR5380_MEM
> >  static struct isapnp_device_id id_table[] __devinitdata = {
> >  	{
> >  	 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
> > @@ -946,7 +949,7 @@ static struct isapnp_device_id id_table[
> >  };
> >
> >  MODULE_DEVICE_TABLE(isapnp, id_table);
> > -
> > +#endif
> >
> >  __setup("ncr5380=", do_NCR5380_setup);
> >  __setup("ncr53c400=", do_NCR53C400_setup);
> > diff -puN drivers/scsi/g_NCR5380.h~g_ncr5380-fix-broken-mmio-compilation
> > drivers/scsi/g_NCR5380.h ---
> > a/drivers/scsi/g_NCR5380.h~g_ncr5380-fix-broken-mmio-compilation +++
> > a/drivers/scsi/g_NCR5380.h
> > @@ -63,7 +63,7 @@ static const char* generic_NCR5380_info(
> >  #define __STRVAL(x) #x
> >  #define STRVAL(x) __STRVAL(x)
> >
> > -#ifndef CONFIG_SCSI_G_NCR5380_MEM
> > +#ifndef SCSI_G_NCR5380_MEM
> >
> >  #define NCR5380_map_config port
> >  #define NCR5380_map_type int
> > @@ -91,7 +91,7 @@ static const char* generic_NCR5380_info(
> >      NCR5380_map_name =
> > (NCR5380_map_type)((instance)->NCR5380_instance_name)
> >
> >  #else
> > -/* therefore CONFIG_SCSI_G_NCR5380_MEM */
> > +/* therefore SCSI_G_NCR5380_MEM */
> >
> >  #define NCR5380_map_config memory
> >  #define NCR5380_map_type unsigned long
> > @@ -114,7 +114,7 @@ static const char* generic_NCR5380_info(
> >      register void __iomem *iomem
> >
> >  #define NCR5380_setup(instance) \
> > -    iomem = (((struct NCR5380_hostdata *)(instance)->hostdata).iomem)
> > +    iomem = (((struct NCR5380_hostdata *)(instance)->hostdata)->iomem)
> >
> >  #endif
> >
> > _



-- 
Ondrej Zary
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux