All of lore.kernel.org
 help / color / mirror / Atom feed
* (RE:  using 2.5.25 with IDE) On sparc64.....
@ 2002-07-09 14:46 Holzrichter, Bruce
  2002-07-10 10:24 ` Richard Zidlicky
  0 siblings, 1 reply; 9+ messages in thread
From: Holzrichter, Bruce @ 2002-07-09 14:46 UTC (permalink / raw)
  To: 'Bartlomiej Zolnierkiewicz', linux-kernel; +Cc: 'axboe@suse.de'

> 
> Contrary to the popular belief 2.5.25 has only Martin's IDE-93
> and has broken locking...
> 
> If you want to run IDE on 2.5.25 get and apply:

I am running a Sparc64 Ultra5 with IDE [insert flame here] which uses a
CMD646 PCI controller, and since at least 2.5.20 it has not booted.  I
currently run 2.5.13, which boots and runs fine, and all is well with 2.4
series.  

I have tried current bk, with IDE 94,95, and 96 applied with the same
result, all hang after printing the partition list of the hard drive.  

I most recently tried Jen's 2.4 forward port, with about the same result,
though the following errors were printed before the kernel hung.  (BTW,
Jen's a modified asm-sparc64/ide.h is below if you want to keep with your
2.4 port)

I am running in PIO mode, and saw that may be broken?  And I realize that
there is probably not much interest/need for IDE to get working on this yet,
but I am wondering if you can point to some ideas to help me along with
figuring out what's going on.  I am going to insert some printk's to see if
I can narrow down where I am hanging at, and if you have any thoughts on
where's the best place to look, I'd be most appreciative.

Thanks
Bruce H.

Patch below to get 2.4 forward port of IDE to compile on Sparc64...
--- linus-2.5/include/asm-sparc64/ide.h	Tue Jul  9 08:53:10 2002
+++ sparctest/include/asm-sparc64/ide.h	Tue Jul  9 09:11:24 2002
@@ -64,7 +64,11 @@
 	for (index = 0; index < MAX_HWIFS; index++) {
 		ide_init_hwif_ports(&hw, ide_default_io_base(index), 0,
NULL);
 		hw.irq = ide_default_irq(ide_default_io_base(index));
+#if defined(CONFIG_IDE_25)
 		ide_register_hw(&hw);
+#elif defined(CONFIG_IDE_24)
+		ide_register_hw(&hw, NULL);
+#endif
 	}
 #endif
 }
@@ -178,6 +182,20 @@
 #endif
 }
 
+#define ide_request_irq(irq,hand,flg,dev,id)
request_irq((irq),(hand),(flg),(dev),(id))
+#define ide_free_irq(irq,dev_id)		free_irq((irq), (dev_id))
+#define ide_check_region(from,extent)		check_region((from),
(extent))
+#define ide_request_region(from,extent,name)	request_region((from),
(extent), (name))
+#define ide_release_region(from,extent)
release_region((from), (extent))
+
+/*
+ * The following are not needed for the non-m68k ports
+ */
+#define ide_ack_intr(hwif)		(1)
+#define ide_fix_driveid(id)		do {} while (0)
+#define ide_release_lock(lock)		do {} while (0)
+#define ide_get_lock(lock, hdlr, data)	do {} while (0)
+ 
 #endif /* __KERNEL__ */
 
 #endif /* _SPARC64_IDE_H */

^ permalink raw reply	[flat|nested] 9+ messages in thread
* RE: (RE:  using 2.5.25 with IDE) On sparc64.....
@ 2002-07-10 21:42 Holzrichter, Bruce
  2002-07-10 22:01 ` Andre Hedrick
  2002-07-10 22:54 ` Bartlomiej Zolnierkiewicz
  0 siblings, 2 replies; 9+ messages in thread
From: Holzrichter, Bruce @ 2002-07-10 21:42 UTC (permalink / raw)
  To: 'Jens Axboe', Richard Zidlicky
  Cc: Holzrichter, Bruce, 'Bartlomiej Zolnierkiewicz', linux-kernel


> Bruce,
> 
> I checked in your previous patch already. Care to really forward port
> asm-sparc64/ide.h from 2.4.19-pre10-rc2 and send me an incremental
> patch?
> 

I have done some Preliminary work on this, but not had a lot of time to look
at it.  In comparing the sparc64 old/new to i386, I replaced a couple of the
#define's with the static __inline__ that were in the 2.4.19 sparc64
version.  

At this point, I say Preliminary, as it DOESN'T work yet on sparc64, and
this is the first IDE code I've really looked at.  It will compile, but
right now, it's falling down at the partition check still, but displaying
"unknown partition" and also a "bad csum" for the sun label. 

Jen's can you take a quick look at this, and let me know what your thoughts
are on this patch?  Again, it doesn't do much right now...

This is an interim diff against your updated ide24 bk tree...

--- spideclean/include/asm-sparc64/ide.h	Wed Jul 10 13:44:03 2002
+++ sparctest/include/asm-sparc64/ide.h	Wed Jul 10 12:18:54 2002
@@ -182,19 +182,132 @@
 #endif
 }
 
-#define ide_request_irq(irq,hand,flg,dev,id)
request_irq((irq),(hand),(flg),(dev),(id))
-#define ide_free_irq(irq,dev_id)		free_irq((irq), (dev_id))
-#define ide_check_region(from,extent)		check_region((from),
(extent))
-#define ide_request_region(from,extent,name)	request_region((from),
(extent), (name))
-#define ide_release_region(from,extent)	release_region((from),
(extent))
+#if defined(CONFIG_IDE_24)
+static __inline__ void ide_fix_driveid(struct hd_driveid *id)
+{
+        int i;
+        u16 *stringcast;
+
+        id->config         = __le16_to_cpu(id->config);
+        id->cyls           = __le16_to_cpu(id->cyls);
+        id->reserved2      = __le16_to_cpu(id->reserved2);
+        id->heads          = __le16_to_cpu(id->heads);
+        id->track_bytes    = __le16_to_cpu(id->track_bytes);
+        id->sector_bytes   = __le16_to_cpu(id->sector_bytes);
+        id->sectors        = __le16_to_cpu(id->sectors);
+        id->vendor0        = __le16_to_cpu(id->vendor0);
+        id->vendor1        = __le16_to_cpu(id->vendor1);
+        id->vendor2        = __le16_to_cpu(id->vendor2);
+        stringcast = (u16 *)&id->serial_no[0];
+        for (i = 0; i < (20/2); i++)
+                stringcast[i] = __le16_to_cpu(stringcast[i]);
+        id->buf_type       = __le16_to_cpu(id->buf_type);
+        id->buf_size       = __le16_to_cpu(id->buf_size);
+        id->ecc_bytes      = __le16_to_cpu(id->ecc_bytes);
+        stringcast = (u16 *)&id->fw_rev[0];
+        for (i = 0; i < (8/2); i++)
+                stringcast[i] = __le16_to_cpu(stringcast[i]);
+        stringcast = (u16 *)&id->model[0];
+        for (i = 0; i < (40/2); i++)
+                stringcast[i] = __le16_to_cpu(stringcast[i]);
+        id->dword_io       = __le16_to_cpu(id->dword_io);
+        id->reserved50     = __le16_to_cpu(id->reserved50);
+        id->field_valid    = __le16_to_cpu(id->field_valid);
+        id->cur_cyls       = __le16_to_cpu(id->cur_cyls);
+        id->cur_heads      = __le16_to_cpu(id->cur_heads);
+        id->cur_sectors    = __le16_to_cpu(id->cur_sectors);
+        id->cur_capacity0  = __le16_to_cpu(id->cur_capacity0);
+        id->cur_capacity1  = __le16_to_cpu(id->cur_capacity1);
+        id->lba_capacity   = __le32_to_cpu(id->lba_capacity);
+        id->dma_1word      = __le16_to_cpu(id->dma_1word);
+        id->dma_mword      = __le16_to_cpu(id->dma_mword);
+        id->eide_pio_modes = __le16_to_cpu(id->eide_pio_modes);
+        id->eide_dma_min   = __le16_to_cpu(id->eide_dma_min);
+        id->eide_dma_time  = __le16_to_cpu(id->eide_dma_time);
+        id->eide_pio       = __le16_to_cpu(id->eide_pio);
+        id->eide_pio_iordy = __le16_to_cpu(id->eide_pio_iordy);
+        for (i = 0; i < 2; i++)
+                id->words69_70[i] = __le16_to_cpu(id->words69_70[i]);
+        for (i = 0; i < 4; i++)
+                id->words71_74[i] = __le16_to_cpu(id->words71_74[i]);
+        id->queue_depth    = __le16_to_cpu(id->queue_depth);
+        for (i = 0; i < 4; i++)
+                id->words76_79[i] = __le16_to_cpu(id->words76_79[i]);
+        id->major_rev_num  = __le16_to_cpu(id->major_rev_num);
+        id->minor_rev_num  = __le16_to_cpu(id->minor_rev_num);
+        id->command_set_1  = __le16_to_cpu(id->command_set_1);
+        id->command_set_2  = __le16_to_cpu(id->command_set_2);
+        id->cfsse          = __le16_to_cpu(id->cfsse);
+        id->cfs_enable_1   = __le16_to_cpu(id->cfs_enable_1);
+        id->cfs_enable_2   = __le16_to_cpu(id->cfs_enable_2);
+        id->csf_default    = __le16_to_cpu(id->csf_default);
+        id->dma_ultra      = __le16_to_cpu(id->dma_ultra);
+        id->word89         = __le16_to_cpu(id->word89);
+        id->word90         = __le16_to_cpu(id->word90);
+        id->CurAPMvalues   = __le16_to_cpu(id->CurAPMvalues);
+        id->word92         = __le16_to_cpu(id->word92);
+        id->hw_config      = __le16_to_cpu(id->hw_config);
+        id->acoustic       = __le16_to_cpu(id->acoustic);
+        for (i = 0; i < 5; i++)
+                id->words95_99[i]  = __le16_to_cpu(id->words95_99[i]);
+        id->lba_capacity_2 = __le64_to_cpu(id->lba_capacity_2);
+        for (i = 0; i < 22; i++)
+                id->words104_125[i]   = __le16_to_cpu(id->words104_125[i]);
+        id->last_lun       = __le16_to_cpu(id->last_lun);
+        id->word127        = __le16_to_cpu(id->word127);
+        id->dlf            = __le16_to_cpu(id->dlf);
+        id->csfo           = __le16_to_cpu(id->csfo);
+        for (i = 0; i < 26; i++)
+                id->words130_155[i] = __le16_to_cpu(id->words130_155[i]);
+        id->word156        = __le16_to_cpu(id->word156);
+        for (i = 0; i < 3; i++)
+                id->words157_159[i] = __le16_to_cpu(id->words157_159[i]);
+        id->cfa_power      = __le16_to_cpu(id->cfa_power);
+        for (i = 0; i < 14; i++)
+                id->words161_175[i] = __le16_to_cpu(id->words161_175[i]);
+        for (i = 0; i < 31; i++)
+                id->words176_205[i] = __le16_to_cpu(id->words176_205[i]);
+        for (i = 0; i < 48; i++)
+                id->words206_254[i] = __le16_to_cpu(id->words206_254[i]);
+        id->integrity_word  = __le16_to_cpu(id->integrity_word);
+}
+
+static __inline__ int ide_request_irq(unsigned int irq,
+                                      void (*handler)(int, void *, struct
pt_regs *),
+                                      unsigned long flags, const char
*name, void *devid)
+{
+        return request_irq(irq, handler, SA_SHIRQ, name, devid);
+}
+
+static __inline__ void ide_free_irq(unsigned int irq, void *dev_id)
+{
+        free_irq(irq, dev_id);
+}
+
+static __inline__ int ide_check_region(ide_ioreg_t base, unsigned int size)
+{
+        return check_region(base, size);
+}
+
+static __inline__ void ide_request_region(ide_ioreg_t base, unsigned int
size,
+                                          const char *name)
+{
+        request_region(base, size, name);
+}
+
+static __inline__ void ide_release_region(ide_ioreg_t base, unsigned int
size)
+{
+        release_region(base, size);
+}
 
 /*
  * The following are not needed for the non-m68k ports
  */
 #define ide_ack_intr(hwif)		(1)
-#define ide_fix_driveid(id)		do {} while (0)
 #define ide_release_lock(lock)		do {} while (0)
 #define ide_get_lock(lock, hdlr, data)	do {} while (0)
+
+#endif /* CONFIG_IDE_24 */
  
 #endif /* __KERNEL__ */
 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2002-07-11  5:46 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-09 14:46 (RE: using 2.5.25 with IDE) On sparc64 Holzrichter, Bruce
2002-07-10 10:24 ` Richard Zidlicky
2002-07-10 10:57   ` Jens Axboe
2002-07-10 15:09     ` Bartlomiej Zolnierkiewicz
2002-07-10 17:24       ` Jens Axboe
2002-07-10 21:42 Holzrichter, Bruce
2002-07-10 22:01 ` Andre Hedrick
2002-07-11  5:45   ` Jens Axboe
2002-07-10 22:54 ` Bartlomiej Zolnierkiewicz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.