* [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
@ 2003-05-19 22:57 Andrew Vasquez
2003-05-21 17:32 ` Andrew Vasquez
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Vasquez @ 2003-05-19 22:57 UTC (permalink / raw)
To: linux-scsi, linux-kernel
All,
A new version of the 8.x series driver for Linux 2.5.x kernels has
been uploaded to SourceForge:
http://sourceforge.net/projects/linux-qla2xxx/
In addition to the standard kernel-tree and external build tar-balls,
a patch file is provided to update v8.00.00b1 sources to v8.00.00b2.
Changes include:
* - Add support for new 'Hotplug initialization' model.
* - Simplify host template by removing unused callbacks.
* - Use scsicam facilities to determine geometry.
* - Fix compilation issues for non-ISP23xx builds:
* - Correct register references in qla_dbg.c.
* - Correct Makefile build process.
* - Simplify dma_addr_t handling during command queuing given
* new block-layer defined restrictions:
* - Physical addresses not spanning 4GB boundaries.
* - Resync with 2.5.69-bk8.
Regards,
Andrew Vasquez
QLogic Corporation
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
2003-05-19 22:57 [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2) Andrew Vasquez
@ 2003-05-21 17:32 ` Andrew Vasquez
2003-05-21 22:26 ` Anton Blanchard
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Vasquez @ 2003-05-21 17:32 UTC (permalink / raw)
To: linux-scsi; +Cc: Andrew Vasquez
[-- Attachment #1: Type: text/plain, Size: 291 bytes --]
All,
If anyone is having problems with the 8.x driver and memory-mapped
I/O, attached is a small patch that should fix the problem. The patch
is already rolled into my pre-beta3.
pci_config_fix-v8.00.00b2.diff
Thanks go to Patrick Mansfield for reporting this.
Regards,
Andrew Vasquez
[-- Attachment #2: pci_config_fix-v8.00.00b2.diff --]
[-- Type: text/plain, Size: 2349 bytes --]
diff -X dontdiff -Nurd 80000b2/qla_def.h 80000b2-iobase_fix/qla_def.h
--- 80000b2/qla_def.h 2003-05-19 15:19:46.000000000 -0700
+++ 80000b2-iobase_fix/qla_def.h 2003-05-21 08:28:05.174690128 -0700
@@ -109,10 +109,8 @@
/*
* I/O register
*/
-/* #define MEMORY_MAPPED_IO */ /* Enable memory mapped I/O */
-#undef MEMORY_MAPPED_IO /* Disable memory mapped I/O */
-#if defined(MEMORY_MAPPED_IO)
+#if MEMORY_MAPPED_IO
#define RD_REG_BYTE(addr) readb(addr)
#define RD_REG_WORD(addr) readw(addr)
#define RD_REG_DWORD(addr) readl(addr)
diff -X dontdiff -Nurd 80000b2/qla_init.c 80000b2-iobase_fix/qla_init.c
--- 80000b2/qla_init.c 2003-05-19 15:19:46.000000000 -0700
+++ 80000b2-iobase_fix/qla_init.c 2003-05-21 08:32:19.771985456 -0700
@@ -496,7 +496,6 @@
static uint8_t
qla2x00_pci_config(scsi_qla_host_t *ha)
{
- uint8_t status;
uint16_t w;
#if defined(ISP2300)
uint32_t cnt;
@@ -520,8 +519,25 @@
pci_set_master(ha->pdev);
pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->revision);
- if (ha->iobase)
- return 0;
+#if MEMORY_MAPPED_IO
+ /* Get memory mapped I/O address */
+ pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
+ mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
+
+ /* Find proper memory chunk for memory map I/O reg */
+ base = mmapbase & PAGE_MASK;
+ page_offset = mmapbase - base;
+
+ /* Get virtual address for I/O registers */
+ ha->mmpbase = ioremap(base, page_offset + 256);
+ if (ha->mmpbase) {
+ ha->mmpbase += page_offset;
+ ha->iobase = (device_reg_t *)ha->mmpbase;
+ }
+#endif
+
+ if (!ha->iobase)
+ return 1;
/*
* We want to respect framework's setting of PCI configuration space
@@ -599,28 +615,9 @@
w &= ~PCI_ROM_ADDRESS_ENABLE;
pci_write_config_word(ha->pdev, PCI_ROM_ADDRESS, w);
- status = 0;
-#if MEMORY_MAPPED_IO
- /* Get memory mapped I/O address */
- pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
- mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
-
- /* Find proper memory chunk for memory map I/O reg */
- base = mmapbase & PAGE_MASK;
- page_offset = mmapbase - base;
-
- /* Get virtual address for I/O registers */
- ha->mmpbase = ioremap(base, page_offset + 256);
- if (ha->mmpbase) {
- ha->mmpbase += page_offset;
- ha->iobase = ha->mmpbase;
- status = 0;
- }
-#endif
-
LEAVE(__func__);
- return (status);
+ return (0);
}
/**
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
2003-05-21 17:32 ` Andrew Vasquez
@ 2003-05-21 22:26 ` Anton Blanchard
2003-05-29 6:19 ` Andrew Vasquez
0 siblings, 1 reply; 7+ messages in thread
From: Anton Blanchard @ 2003-05-21 22:26 UTC (permalink / raw)
To: Andrew Vasquez, linux-scsi
Hi,
> +#if MEMORY_MAPPED_IO
> + /* Get memory mapped I/O address */
> + pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
You really want to be using pci_resource_start(ha->pdev, 1) so it will
work on architectures like ppc64 and sparc64.
> + mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
> +
> + /* Find proper memory chunk for memory map I/O reg */
> + base = mmapbase & PAGE_MASK;
> + page_offset = mmapbase - base;
Is that correct?
> + /* Get virtual address for I/O registers */
> + ha->mmpbase = ioremap(base, page_offset + 256);
Anton
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
2003-05-21 22:26 ` Anton Blanchard
@ 2003-05-29 6:19 ` Andrew Vasquez
2003-05-29 14:26 ` Jeff Garzik
2003-05-29 15:33 ` Anton Blanchard
0 siblings, 2 replies; 7+ messages in thread
From: Andrew Vasquez @ 2003-05-29 6:19 UTC (permalink / raw)
To: linux-scsi
On Thu, 22 May 2003, Anton Blanchard wrote:
> > +#if MEMORY_MAPPED_IO
> > + /* Get memory mapped I/O address */
> > + pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
>
> You really want to be using pci_resource_start(ha->pdev, 1) so it will
> work on architectures like ppc64 and sparc64.
>
You're correct -- code updated in my tree.
> > + mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
> > +
> > + /* Find proper memory chunk for memory map I/O reg */
> > + base = mmapbase & PAGE_MASK;
> > + page_offset = mmapbase - base;
>
> Is that correct?
>
The 'mmapbase &= PCI_BASE_ADDRESS_MEM_MASK' does appear to be
incorrect, yet, I just have one question. it seems several drivers
(i.e. sym53c8xx_2, aic7xxx) ensure the memory-mapped resource begins
on a page boundary before passing it onto ioremap(). Yet, in the code
for __ioremap(), (arch/i386/mm/ioremap.c) there is this small comment:
/*
* NOTE! We need to allow non-page-aligned mappings too: we
* will obviously have to convert them into an offset in a
* page-aligned mapping, but the caller shouldn't need to know
* that small detail.
*
*/
Is it safe to assume *all* platforms will handle this case internally,
or should drivers perform the pre-process?
BTW: appearantly none of my emails sent via my QLogic account have
made it to linux-[kernel|scsi] in the past week -- I'm working with IT
to solve the problem - please be patient with the response time lags.
Thanks,
Andrew Vasquez
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
2003-05-29 6:19 ` Andrew Vasquez
@ 2003-05-29 14:26 ` Jeff Garzik
2003-05-29 15:17 ` Andrew Vasquez
2003-05-29 15:33 ` Anton Blanchard
1 sibling, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2003-05-29 14:26 UTC (permalink / raw)
To: Andrew Vasquez; +Cc: linux-scsi
Andrew Vasquez wrote:
> On Thu, 22 May 2003, Anton Blanchard wrote:
>
>
>>>+#if MEMORY_MAPPED_IO
>>>+ /* Get memory mapped I/O address */
>>>+ pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
>>
>>You really want to be using pci_resource_start(ha->pdev, 1) so it will
>>work on architectures like ppc64 and sparc64.
>>
>
>
> You're correct -- code updated in my tree.
>
>
>>>+ mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
>>>+
>>>+ /* Find proper memory chunk for memory map I/O reg */
>>>+ base = mmapbase & PAGE_MASK;
>>>+ page_offset = mmapbase - base;
>>
>>Is that correct?
>>
>
>
> The 'mmapbase &= PCI_BASE_ADDRESS_MEM_MASK' does appear to be
> incorrect, yet, I just have one question.
s/incorrect/obsolete/
This masking is a harmless remnant of ancient 2.2.x days, when we read
the PCI information straight out of the PCI config registers. This
masking is no longer needed when a driver is converted to using
pci_resource_start (as it should be :))
it seems several drivers
> (i.e. sym53c8xx_2, aic7xxx) ensure the memory-mapped resource begins
> on a page boundary before passing it onto ioremap(). Yet, in the code
> for __ioremap(), (arch/i386/mm/ioremap.c) there is this small comment:
>
> /*
> * NOTE! We need to allow non-page-aligned mappings too: we
> * will obviously have to convert them into an offset in a
> * page-aligned mapping, but the caller shouldn't need to know
> * that small detail.
> *
> */
>
> Is it safe to assume *all* platforms will handle this case internally,
> or should drivers perform the pre-process?
They better. It is expected that you can pass the bus address returned
from pci_resource_start directly to ioremap (after ensuring availability
by calling pci_request_regions).
Jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
2003-05-29 14:26 ` Jeff Garzik
@ 2003-05-29 15:17 ` Andrew Vasquez
0 siblings, 0 replies; 7+ messages in thread
From: Andrew Vasquez @ 2003-05-29 15:17 UTC (permalink / raw)
To: linux-scsi
On Thu, 29 May 2003, Jeff Garzik wrote:
> > it seems several drivers
> >(i.e. sym53c8xx_2, aic7xxx) ensure the memory-mapped resource begins
> >on a page boundary before passing it onto ioremap(). Yet, in the code
> >for __ioremap(), (arch/i386/mm/ioremap.c) there is this small comment:
> >
> > /*
> > * NOTE! We need to allow non-page-aligned mappings too: we
> > * will obviously have to convert them into an offset in a
> > * page-aligned mapping, but the caller shouldn't need to know
> > * that small detail.
> > *
> > */
> >
> >Is it safe to assume *all* platforms will handle this case internally,
> >or should drivers perform the pre-process?
>
> They better. It is expected that you can pass the bus address returned
> from pci_resource_start directly to ioremap (after ensuring availability
> by calling pci_request_regions).
>
Thanks for the clarification.
--
Andrew Vasquez
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2).
2003-05-29 6:19 ` Andrew Vasquez
2003-05-29 14:26 ` Jeff Garzik
@ 2003-05-29 15:33 ` Anton Blanchard
1 sibling, 0 replies; 7+ messages in thread
From: Anton Blanchard @ 2003-05-29 15:33 UTC (permalink / raw)
To: Andrew Vasquez, linux-scsi
> > > + mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
> > > +
> > > + /* Find proper memory chunk for memory map I/O reg */
> > > + base = mmapbase & PAGE_MASK;
> > > + page_offset = mmapbase - base;
> >
> > Is that correct?
> >
I was more interested in the next bit, shouldnt base be
mmapbase & ~PAGE_MASK? Based on your next question it can go away
anyway.
> Is it safe to assume *all* platforms will handle this case internally,
> or should drivers perform the pre-process?
Yes, ioremap should handle non page aligned addresses.
Anton
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2003-05-29 15:21 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-19 22:57 [ANNOUNCE] QLogic qla2xxx driver update available (v8.00.00b2) Andrew Vasquez
2003-05-21 17:32 ` Andrew Vasquez
2003-05-21 22:26 ` Anton Blanchard
2003-05-29 6:19 ` Andrew Vasquez
2003-05-29 14:26 ` Jeff Garzik
2003-05-29 15:17 ` Andrew Vasquez
2003-05-29 15:33 ` Anton Blanchard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox