LKML Archive on lore.kernel.org
 help / color / Atom feed
* [BUG] agpgart-amd64 not initialized in 2.6.33-rc5 if iommu=allowed in kernel command line
@ 2010-01-23 21:14 Marin Mitov
  2010-01-25  5:10 ` FUJITA Tomonori
  0 siblings, 1 reply; 9+ messages in thread
From: Marin Mitov @ 2010-01-23 21:14 UTC (permalink / raw)
  To: FUJITA Tomonori; +Cc: linux-kernel

Hi,

If I start the kernel without command line parameters (4GB RAM)
iommu-swiotlb is used due to quirk in VIA K8T800Pro Host Bridge.
In that case all is OK.

If I put in the kernel command line: iommu=allowed (+other parameters)
I have iommu-gart used but no AGP. dmesg output:

[drm:mga_do_agp_dma_bootstrap] *ERROR* Unable to acquire AGP: -19

For debugging I patched the kernel (mostly prink(), shown at the end)
producing the output in the dmesg:

no command line
MDM: agp_amd64_init entered
MDM: agp_off: false
MDM: agp_bridges_found: 0
MDM: gart_iommu_aperture: 0
MDM: agp_amd64_probe entered

command line: iommu=allowed:
MDM: gart_iommu_init
MDM: before: no_agp = 0
MDM: 	agp_amd64_init entered
MDM: 	agp_off: false
MDM: 	agp_bridges_found: 0
MDM: after: no_agp = 1
MDM: agp_amd64_init() < 0: 1
MDM: agp_copy_info() < 0: -1
MDM: 	agp_amd64_init entered
MDM: 	agp_off: false
MDM: 	agp_bridges_found: 0

One see in the last case ( iommu=allowed) agp_amd64_init()
is executed twice, but agp_amd64_probe() is not executed at all
(agp_bridges_found is incremented only in agp_amd64_probe())

Is this expected behavior?

Thanks,

Marin Mitov

The testing patch:
--- ./drivers/char/agp/amd64-agp.c.orig	2010-01-23 18:46:46.000000000 +0200
+++ ./drivers/char/agp/amd64-agp.c	2010-01-23 22:09:44.000000000 +0200
@@ -498,7 +498,7 @@
 	struct agp_bridge_data *bridge;
 	u8 cap_ptr;
 	int err;
-
+	printk(KERN_DEBUG "MDM: agp_amd64_probe entered\n");
 	cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
 	if (!cap_ptr)
 		return -ENODEV;
@@ -725,13 +725,14 @@
 int __init agp_amd64_init(void)
 {
 	int err = 0;
-
+	printk(KERN_DEBUG "MDM: agp_amd64_init entered\n");
 	if (agp_off)
 		return -EINVAL;
-
+	printk(KERN_DEBUG "MDM: agp_off: false\n");
+	printk(KERN_DEBUG "MDM: agp_bridges_found: %d\n", agp_bridges_found);
 	if (gart_iommu_aperture)
 		return agp_bridges_found ? 0 : -ENODEV;
-
+	printk(KERN_DEBUG "MDM: gart_iommu_aperture: %d\n", gart_iommu_aperture);
 	err = pci_register_driver(&agp_amd64_pci_driver);
 	if (err < 0)
 		return err;
--- ./arch/x86/kernel/pci-gart_64.c.orig	2010-01-23 17:07:42.000000000 +0200
+++ ./arch/x86/kernel/pci-gart_64.c	2010-01-23 17:47:22.000000000 +0200
@@ -734,20 +734,25 @@
 	unsigned long start_pfn, end_pfn;
 	unsigned long scratch;
 	long i;
+	int tmp1 = -1, tmp2 = -1;
 
 	if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0)
 		return 0;
 
+	printk(KERN_DEBUG "MDM: gart_iommu_init\n");
 #ifndef CONFIG_AGP_AMD64
 	no_agp = 1;
 #else
 	/* Makefile puts PCI initialization via subsys_initcall first. */
 	/* Add other K8 AGP bridge drivers here */
+	printk(KERN_DEBUG "MDM: before: no_agp = %d\n", no_agp);
 	no_agp = no_agp ||
-		(agp_amd64_init() < 0) ||
-		(agp_copy_info(agp_bridge, &info) < 0);
+		(tmp1 = (agp_amd64_init() < 0)) ||
+		(tmp2 = (agp_copy_info(agp_bridge, &info) < 0));
 #endif
-
+	printk(KERN_DEBUG "MDM: after: no_agp = %d\n", no_agp);
+	printk(KERN_DEBUG "MDM: agp_amd64_init() < 0: %d\n", tmp1);
+	printk(KERN_DEBUG "MDM: agp_copy_info() < 0: %d\n", tmp2); 
 	if (no_iommu ||
 	    (!force_iommu && max_pfn <= MAX_DMA32_PFN) ||
 	    !gart_iommu_aperture ||



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

end of thread, back to index

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-23 21:14 [BUG] agpgart-amd64 not initialized in 2.6.33-rc5 if iommu=allowed in kernel command line Marin Mitov
2010-01-25  5:10 ` FUJITA Tomonori
2010-01-25  7:37   ` Marin Mitov
2010-02-02 11:23     ` FUJITA Tomonori
2010-02-02 15:49       ` FUJITA Tomonori
2010-02-03 15:19         ` Marin Mitov
2010-02-04  0:12           ` FUJITA Tomonori
2010-02-03 16:18         ` Marin Mitov
2010-01-31  8:30   ` [tip:x86/urgent] x86/agp: Fix agp_amd64_init regression tip-bot for FUJITA Tomonori

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git
	git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org
	public-inbox-index lkml

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git