On Monday 02 October 2006 08:50, Ariff Abdullah wrote: > On Mon, 02 Oct 2006 12:22:33 +0000 > Poul-Henning Kamp <phk_at_phk.freebsd.dk> wrote: > > > > During a "make universe" ia64 fails with the following errors. > > > > I wouldn't expect a sound driver to call any of those functions at > > all, what's going on ? > > > > > > ===> sound/driver/hda (all) > > cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE > > -std=c99 -nostd inc -I- -DHAVE_KERNEL_OPTION_HEADERS -include > > /usr/obj/ia64/src/src0/src/sys/M AC/opt_global.h -I. -I_at_ > > -I_at_/contrib/altq -finline-limit=15000 --param inline-uni > > t-growth=100 --param large-function-growth=1000 -fno-common -g > > -I/usr/obj/ia64/s rc/src0/src/sys/MAC -ffixed-r13 > > -mfixed-range=f32-f127 -mno-sdata -ffreestanding > > -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes > > -Wmissing-prototy > > pes -Wpointer-arith -Winline -Wcast-qual -Wundef > > -fformat-extensions -c /src/sr > > c0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pci/hda/h > > dac.c > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: > > In function `hdac_dma_nocache': > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 999: warning: implicit declaration of function > > `vtopte' > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 999: warning: nested extern declaration of `vtopte' > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 999: warning: assignment makes pointer from integer > > without a cast > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 1001: error: `PG_N' undeclared (first use in this > > function) > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 1001: error: (Each undeclared identifier is reported > > only once > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 1001: error: for each function it appears in.) > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 1002: warning: implicit declaration of function > > `invltlb' > > /src/src0/src/sys/modules/sound/driver/hda/../../../../dev/sound/pc > > i/hda/hdac.c: 1002: warning: nested extern declaration of `invltlb' > > > > > > I wish BUS_DMA_NOCACHE has real meaning (like what NetBSD did) since > uncached DMA is pretty much guarantee to make the driver works on > broken i386/amd86 hardwares. > > Should we just narrow this down to i386/amd64 , or give > BUS_DMA_NOCACHE a real meaning as part of bus_dmamem_alloc() ? > > I'm open for suggestion. I can probably fix NOCACHE for i386/amd64 for the bus_dmamem_alloc() case. Try this patch: --- //depot/vendor/freebsd/src/sys/amd64/amd64/busdma_machdep.c 2006/06/01 04:50:42 +++ //depot/user/jhb/acpipci/amd64/amd64/busdma_machdep.c 2006/10/02 18:58:21 _at__at_ -48,6 +48,7 _at__at_ #include <machine/atomic.h> #include <machine/bus.h> #include <machine/md_var.h> +#include <machine/specialreg.h> #define MAX_BPAGES 8192 _at__at_ -522,6 +523,9 _at__at_ } else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) { printf("bus_dmamem_alloc failed to align memory properly."); } + if (flags & BUS_DMA_NOCACHE) + pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize, + PAT_UNCACHEABLE); CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, ENOMEM); return (0); --- //depot/vendor/freebsd/src/sys/i386/i386/busdma_machdep.c 2006/09/26 23:16:33 +++ //depot/user/jhb/acpipci/i386/i386/busdma_machdep.c 2006/10/02 18:58:21 _at__at_ -51,6 +51,7 _at__at_ #include <machine/atomic.h> #include <machine/bus.h> #include <machine/md_var.h> +#include <machine/specialreg.h> #define MAX_BPAGES 512 #define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3 _at__at_ -530,6 +531,9 _at__at_ } else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) { printf("bus_dmamem_alloc failed to align memory properly.\n"); } + if (flags & BUS_DMA_NOCACHE) + pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize, + PAT_UNCACHEABLE); CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, ENOMEM); return (0); -- John BaldwinReceived on Mon Oct 02 2006 - 17:22:08 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:01 UTC