svn commit: r254628 - in projects/bhyve_npt_pmap: contrib/libcxxrt contrib/wpa/src/drivers sys/amd64/conf sys/arm/allwinner sys/arm/allwinner/a20 sys/arm/arm sys/arm/conf sys/boot/fdt/dts sys/cam s...
Neel Natu
neel at FreeBSD.org
Wed Aug 21 23:22:40 UTC 2013
Author: neel
Date: Wed Aug 21 23:22:36 2013
New Revision: 254628
URL: http://svnweb.freebsd.org/changeset/base/254628
Log:
IFC @254063
Added:
projects/bhyve_npt_pmap/sys/arm/allwinner/a20/
- copied from r254063, head/sys/arm/allwinner/a20/
projects/bhyve_npt_pmap/sys/arm/conf/CUBIEBOARD2
- copied unchanged from r254063, head/sys/arm/conf/CUBIEBOARD2
projects/bhyve_npt_pmap/sys/boot/fdt/dts/cubieboard2.dts
- copied unchanged from r254063, head/sys/boot/fdt/dts/cubieboard2.dts
Modified:
projects/bhyve_npt_pmap/contrib/libcxxrt/unwind-itanium.h
projects/bhyve_npt_pmap/contrib/wpa/src/drivers/driver_wired.c
projects/bhyve_npt_pmap/sys/amd64/conf/GENERIC
projects/bhyve_npt_pmap/sys/arm/allwinner/common.c
projects/bhyve_npt_pmap/sys/arm/allwinner/files.a10
projects/bhyve_npt_pmap/sys/arm/allwinner/timer.c
projects/bhyve_npt_pmap/sys/arm/arm/busdma_machdep-v6.c
projects/bhyve_npt_pmap/sys/cam/cam_periph.c
projects/bhyve_npt_pmap/sys/cam/cam_xpt.c
projects/bhyve_npt_pmap/sys/cam/cam_xpt_periph.h
projects/bhyve_npt_pmap/sys/cam/scsi/scsi_da.c
projects/bhyve_npt_pmap/sys/i386/conf/GENERIC
projects/bhyve_npt_pmap/sys/ia64/conf/GENERIC
projects/bhyve_npt_pmap/sys/kern/kern_poll.c
projects/bhyve_npt_pmap/sys/powerpc/conf/GENERIC
projects/bhyve_npt_pmap/sys/sparc64/conf/GENERIC
Directory Properties:
projects/bhyve_npt_pmap/ (props changed)
projects/bhyve_npt_pmap/contrib/libcxxrt/ (props changed)
projects/bhyve_npt_pmap/contrib/wpa/ (props changed)
projects/bhyve_npt_pmap/sys/ (props changed)
projects/bhyve_npt_pmap/sys/boot/ (props changed)
Modified: projects/bhyve_npt_pmap/contrib/libcxxrt/unwind-itanium.h
==============================================================================
--- projects/bhyve_npt_pmap/contrib/libcxxrt/unwind-itanium.h Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/contrib/libcxxrt/unwind-itanium.h Wed Aug 21 23:22:36 2013 (r254628)
@@ -80,7 +80,7 @@ struct _Unwind_Exception
_Unwind_Exception_Cleanup_Fn exception_cleanup;
unsigned long private_1;
unsigned long private_2;
- } __attribute__((__aligned__));
+ };
extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
Modified: projects/bhyve_npt_pmap/contrib/wpa/src/drivers/driver_wired.c
==============================================================================
--- projects/bhyve_npt_pmap/contrib/wpa/src/drivers/driver_wired.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/contrib/wpa/src/drivers/driver_wired.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -473,7 +473,8 @@ static int wpa_driver_wired_get_ifstatus
return -1;
}
close(s);
- *status = ifmr.ifm_status & (IFM_ACTIVE|IFM_AVALID);
+ *status = (ifmr.ifm_status & (IFM_ACTIVE|IFM_AVALID)) ==
+ (IFM_ACTIVE|IFM_AVALID);
return 0;
}
Modified: projects/bhyve_npt_pmap/sys/amd64/conf/GENERIC
==============================================================================
--- projects/bhyve_npt_pmap/sys/amd64/conf/GENERIC Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/amd64/conf/GENERIC Wed Aug 21 23:22:36 2013 (r254628)
@@ -75,7 +75,7 @@ options INCLUDE_CONFIG_FILE # Inclu
# Debugging support. Always need this:
options KDB # Enable kernel debugger support.
# For minimum debugger support (stable branch) use:
-#options KDB_TRACE # Print a stack trace for a panic.
+options KDB_TRACE # Print a stack trace for a panic.
# For full debugger support use this instead:
options DDB # Support DDB.
options GDB # Support remote GDB.
Modified: projects/bhyve_npt_pmap/sys/arm/allwinner/common.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/arm/allwinner/common.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/arm/allwinner/common.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -47,10 +47,16 @@ static int
fdt_aintc_decode_ic(phandle_t node, pcell_t *intr, int *interrupt, int *trig,
int *pol)
{
- if (!fdt_is_compatible(node, "allwinner,sun4i-ic"))
+ int offset;
+
+ if (fdt_is_compatible(node, "allwinner,sun4i-ic"))
+ offset = 0;
+ else if (fdt_is_compatible(node, "arm,gic"))
+ offset = 32;
+ else
return (ENXIO);
- *interrupt = fdt32_to_cpu(intr[0]);
+ *interrupt = fdt32_to_cpu(intr[0]) + offset;
*trig = INTR_TRIGGER_CONFORM;
*pol = INTR_POLARITY_CONFORM;
Modified: projects/bhyve_npt_pmap/sys/arm/allwinner/files.a10
==============================================================================
--- projects/bhyve_npt_pmap/sys/arm/allwinner/files.a10 Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/arm/allwinner/files.a10 Wed Aug 21 23:22:36 2013 (r254628)
@@ -9,6 +9,7 @@ arm/arm/cpufunc_asm_arm11.S standard
arm/arm/cpufunc_asm_armv7.S standard
arm/arm/irq_dispatch.S standard
+arm/allwinner/a20/a20_cpu_cfg.c standard
arm/allwinner/a10_clk.c standard
arm/allwinner/a10_gpio.c optional gpio
arm/allwinner/a10_ehci.c optional ehci
Modified: projects/bhyve_npt_pmap/sys/arm/allwinner/timer.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/arm/allwinner/timer.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/arm/allwinner/timer.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -52,6 +52,8 @@ __FBSDID("$FreeBSD$");
#include <sys/kdb.h>
+#include "a20/a20_cpu_cfg.h"
+
/**
* Timer registers addr
*
@@ -84,6 +86,7 @@ struct a10_timer_softc {
uint32_t sc_period;
uint32_t timer0_freq;
struct eventtimer et;
+ uint8_t sc_timer_type; /* 0 for A10, 1 for A20 */
};
int a10_timer_get_timerfreq(struct a10_timer_softc *);
@@ -126,6 +129,10 @@ timer_read_counter64(void)
{
uint32_t lo, hi;
+ /* In case of A20 get appropriate counter info */
+ if (a10_timer_sc->sc_timer_type)
+ return (a20_read_counter64());
+
/* Latch counter, wait for it to be ready to read. */
timer_write_4(a10_timer_sc, CNT64_CTRL_REG, CNT64_RL_EN);
while (timer_read_4(a10_timer_sc, CNT64_CTRL_REG) & CNT64_RL_EN)
@@ -140,11 +147,18 @@ timer_read_counter64(void)
static int
a10_timer_probe(device_t dev)
{
+ struct a10_timer_softc *sc;
- if (!ofw_bus_is_compatible(dev, "allwinner,sun4i-timer"))
+ sc = device_get_softc(dev);
+
+ if (ofw_bus_is_compatible(dev, "allwinner,sun4i-timer"))
+ sc->sc_timer_type = 0;
+ else if (ofw_bus_is_compatible(dev, "allwinner,sun7i-timer"))
+ sc->sc_timer_type = 1;
+ else
return (ENXIO);
- device_set_desc(dev, "Allwinner A10 timer");
+ device_set_desc(dev, "Allwinner A10/A20 timer");
return (BUS_PROBE_DEFAULT);
}
Modified: projects/bhyve_npt_pmap/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/arm/arm/busdma_machdep-v6.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/arm/arm/busdma_machdep-v6.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -67,8 +67,6 @@ __FBSDID("$FreeBSD$");
#define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3
#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
-#define FIX_DMAP_BUS_DMASYNC_POSTREAD
-
struct bounce_zone;
struct bus_dma_tag {
@@ -179,7 +177,7 @@ static bus_addr_t add_bounce_page(bus_dm
vm_offset_t vaddr, bus_addr_t addr,
bus_size_t size);
static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
-int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr);
+int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr, bus_size_t size, int coherent);
static void _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
void *buf, bus_size_t buflen, int flags);
static void _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map,
@@ -269,7 +267,7 @@ _bus_dma_inrange(struct arm32_dma_range
* to check for a match, if there is no filter callback then assume a match.
*/
int
-run_filter(bus_dma_tag_t dmat, bus_addr_t paddr)
+run_filter(bus_dma_tag_t dmat, bus_addr_t paddr, bus_size_t size, int coherent)
{
int retval;
@@ -277,7 +275,9 @@ run_filter(bus_dma_tag_t dmat, bus_addr_
do {
if (((paddr > dmat->lowaddr && paddr <= dmat->highaddr)
- || ((paddr & (dmat->alignment - 1)) != 0))
+ || ((paddr & (dmat->alignment - 1)) != 0) ||
+ (!coherent && (size & arm_dcache_align_mask)) ||
+ (!coherent && (paddr & arm_dcache_align_mask)))
&& (dmat->filter == NULL
|| (*dmat->filter)(dmat->filterarg, paddr) != 0))
retval = 1;
@@ -426,8 +426,7 @@ bus_dma_tag_create(bus_dma_tag_t parent,
|| newtag->alignment > 1)
newtag->flags |= BUS_DMA_COULD_BOUNCE;
- if (((newtag->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
- (flags & BUS_DMA_ALLOCNOW) != 0) {
+ if ((flags & BUS_DMA_ALLOCNOW) != 0) {
struct bounce_zone *bz;
/* Must bounce */
@@ -503,6 +502,41 @@ out:
return (error);
}
+static int allocate_bz_and_pages(bus_dma_tag_t dmat, bus_dmamap_t mapp)
+{
+ struct bounce_zone *bz;
+ int maxpages;
+ int error;
+
+ if (dmat->bounce_zone == NULL)
+ if ((error = alloc_bounce_zone(dmat)) != 0)
+ return (error);
+ bz = dmat->bounce_zone;
+ /* Initialize the new map */
+ STAILQ_INIT(&(mapp->bpages));
+
+ /*
+ * Attempt to add pages to our pool on a per-instance
+ * basis up to a sane limit.
+ */
+ maxpages = MAX_BPAGES;
+ if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0
+ || (bz->map_count > 0 && bz->total_bpages < maxpages)) {
+ int pages;
+
+ pages = MAX(atop(dmat->maxsize), 1);
+ pages = MIN(maxpages - bz->total_bpages, pages);
+ pages = MAX(pages, 1);
+ if (alloc_bounce_pages(dmat, pages) < pages)
+ return (ENOMEM);
+
+ if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0)
+ dmat->flags |= BUS_DMA_MIN_ALLOC_COMP;
+ }
+ bz->map_count++;
+ return (0);
+}
+
/*
* Allocate a handle for mapping from kva/uva/physical
* address space into bus device space.
@@ -511,9 +545,7 @@ int
bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
{
int mapsize;
- int error;
-
- error = 0;
+ int error = 0;
mapsize = sizeof(**mapp) + (sizeof(struct sync_list) * dmat->nsegments);
*mapp = (bus_dmamap_t)malloc(mapsize, M_DEVBUF, M_NOWAIT | M_ZERO);
@@ -540,52 +572,12 @@ bus_dmamap_create(bus_dma_tag_t dmat, in
* exclusion region, a data alignment that is stricter than 1, and/or
* an active address boundary.
*/
- if (dmat->flags & BUS_DMA_COULD_BOUNCE) {
-
- /* Must bounce */
- struct bounce_zone *bz;
- int maxpages;
-
- if (dmat->bounce_zone == NULL) {
- if ((error = alloc_bounce_zone(dmat)) != 0) {
- free(*mapp, M_DEVBUF);
- *mapp = NULL;
- return (error);
- }
- }
- bz = dmat->bounce_zone;
-
- /* Initialize the new map */
- STAILQ_INIT(&((*mapp)->bpages));
-
- /*
- * Attempt to add pages to our pool on a per-instance
- * basis up to a sane limit.
- */
- maxpages = MAX_BPAGES;
- if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0
- || (bz->map_count > 0 && bz->total_bpages < maxpages)) {
- int pages;
-
- pages = MAX(atop(dmat->maxsize), 1);
- pages = MIN(maxpages - bz->total_bpages, pages);
- pages = MAX(pages, 1);
- if (alloc_bounce_pages(dmat, pages) < pages)
- error = ENOMEM;
-
- if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0) {
- if (error == 0)
- dmat->flags |= BUS_DMA_MIN_ALLOC_COMP;
- } else {
- error = 0;
- }
- }
- bz->map_count++;
+ error = allocate_bz_and_pages(dmat, *mapp);
+ if (error != 0) {
+ free(*mapp, M_DEVBUF);
+ *mapp = NULL;
+ return (error);
}
- if (error == 0)
- dmat->map_count++;
- CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
- __func__, dmat, dmat->flags, error);
return (error);
}
@@ -624,6 +616,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
vm_memattr_t memattr;
int mflags;
int mapsize;
+ int error;
if (flags & BUS_DMA_NOWAIT)
mflags = M_NOWAIT;
@@ -641,6 +634,13 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
}
(*mapp)->sync_count = 0;
+ /* We may need bounce pages, even for allocated memory */
+ error = allocate_bz_and_pages(dmat, *mapp);
+ if (error != 0) {
+ free(*mapp, M_DEVBUF);
+ *mapp = NULL;
+ return (error);
+ }
if (dmat->segments == NULL) {
dmat->segments = (bus_dma_segment_t *)malloc(
@@ -666,10 +666,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
ba = standard_allocator;
(*mapp)->flags = 0;
}
-#ifdef notyet
- /* All buffers we allocate are cache-aligned. */
- map->flags |= DMAMAP_CACHE_ALIGNED;
-#endif
/*
* Try to find a bufzone in the allocator that holds a cache of buffers
@@ -770,7 +766,8 @@ _bus_dmamap_count_phys(bus_dma_tag_t dma
curaddr = buf;
while (buflen != 0) {
sgsize = MIN(buflen, dmat->maxsegsz);
- if (run_filter(dmat, curaddr) != 0) {
+ if (run_filter(dmat, curaddr, sgsize,
+ map->flags & DMAMAP_COHERENT) != 0) {
sgsize = MIN(sgsize, PAGE_SIZE);
map->pagesneeded++;
}
@@ -806,7 +803,10 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
paddr = pmap_kextract(vaddr);
else
paddr = pmap_extract(map->pmap, vaddr);
- if (run_filter(dmat, paddr) != 0) {
+ if (run_filter(dmat, paddr,
+ min(vendaddr - vaddr,
+ (PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK))),
+ map->flags & DMAMAP_COHERENT) != 0) {
map->pagesneeded++;
}
vaddr += (PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK));
@@ -922,7 +922,8 @@ _bus_dmamap_load_phys(bus_dma_tag_t dmat
if (segs == NULL)
segs = dmat->segments;
- if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
+ if (((map->flags & DMAMAP_COHERENT) == 0) ||
+ (dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
_bus_dmamap_count_phys(dmat, map, buf, buflen, flags);
if (map->pagesneeded != 0) {
error = _bus_dmamap_reserve_pages(dmat, map, flags);
@@ -934,8 +935,10 @@ _bus_dmamap_load_phys(bus_dma_tag_t dmat
while (buflen > 0) {
curaddr = buf;
sgsize = MIN(buflen, dmat->maxsegsz);
- if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
- map->pagesneeded != 0 && run_filter(dmat, curaddr)) {
+ if ((((map->flags & DMAMAP_COHERENT) == 0) ||
+ ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0)) &&
+ map->pagesneeded != 0 && run_filter(dmat, curaddr,
+ sgsize, map->flags & DMAMAP_COHERENT)) {
sgsize = MIN(sgsize, PAGE_SIZE);
curaddr = add_bounce_page(dmat, map, 0, curaddr,
sgsize);
@@ -982,7 +985,8 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
map->pmap = pmap;
- if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
+ if (!(map->flags & DMAMAP_COHERENT) ||
+ (dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
_bus_dmamap_count_pages(dmat, map, buf, buflen, flags);
if (map->pagesneeded != 0) {
error = _bus_dmamap_reserve_pages(dmat, map, flags);
@@ -1012,8 +1016,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
if (buflen < sgsize)
sgsize = buflen;
- if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
- map->pagesneeded != 0 && run_filter(dmat, curaddr)) {
+ if ((((map->flags & DMAMAP_COHERENT) == 0) ||
+ ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0)) &&
+ map->pagesneeded != 0 && run_filter(dmat, curaddr,
+ sgsize, map->flags & DMAMAP_COHERENT)) {
curaddr = add_bounce_page(dmat, map, vaddr, curaddr,
sgsize);
} else {
@@ -1156,12 +1162,6 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus
{
struct bounce_page *bpage;
struct sync_list *sl, *end;
- bus_size_t len, unalign;
- vm_offset_t buf, ebuf;
-#ifdef FIX_DMAP_BUS_DMASYNC_POSTREAD
- vm_offset_t bbuf;
- char _tmp_cl[arm_dcache_align], _tmp_clend[arm_dcache_align];
-#endif
/*
* If the buffer was from user space, it is possible that this is not
* the same vm map, especially on a POST operation. It's not clear that
@@ -1252,45 +1252,9 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus
case BUS_DMASYNC_PREREAD:
while (sl != end) {
- /* write back the unaligned portions */
- vm_paddr_t physaddr = sl->busaddr, ephysaddr;
- buf = sl->vaddr;
- len = sl->datacount;
- ebuf = buf + len; /* end of buffer */
- ephysaddr = physaddr + len;
- unalign = buf & arm_dcache_align_mask;
- if (unalign) {
- /* wbinv leading fragment */
- buf &= ~arm_dcache_align_mask;
- physaddr &= ~arm_dcache_align_mask;
- cpu_dcache_wbinv_range(buf,
- arm_dcache_align);
- l2cache_wbinv_range(buf, physaddr,
- arm_dcache_align);
- buf += arm_dcache_align;
- physaddr += arm_dcache_align;
- /* number byte in buffer wbinv */
- unalign = arm_dcache_align - unalign;
- if (len > unalign)
- len -= unalign;
- else
- len = 0;
- }
- unalign = ebuf & arm_dcache_align_mask;
- if (ebuf > buf && unalign) {
- /* wbinv trailing fragment */
- len -= unalign;
- ebuf -= unalign;
- ephysaddr -= unalign;
- cpu_dcache_wbinv_range(ebuf,
- arm_dcache_align);
- l2cache_wbinv_range(ebuf, ephysaddr,
- arm_dcache_align);
- }
- if (ebuf > buf) {
- cpu_dcache_inv_range(buf, len);
- l2cache_inv_range(buf, physaddr, len);
- }
+ cpu_dcache_inv_range(sl->vaddr, sl->datacount);
+ l2cache_inv_range(sl->vaddr, sl->busaddr,
+ sl->datacount);
sl++;
}
break;
@@ -1304,60 +1268,6 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus
}
break;
-#ifdef FIX_DMAP_BUS_DMASYNC_POSTREAD
- case BUS_DMASYNC_POSTREAD:
- while (sl != end) {
- /* write back the unaligned portions */
- vm_paddr_t physaddr;
- register_t s = 0;
-
- buf = sl->vaddr;
- len = sl->datacount;
- physaddr = sl->busaddr;
- bbuf = buf & ~arm_dcache_align_mask;
- ebuf = buf + len;
- physaddr = physaddr & ~arm_dcache_align_mask;
-
-
- if ((buf & arm_dcache_align_mask) ||
- (ebuf & arm_dcache_align_mask)) {
- s = intr_disable();
- unalign = buf & arm_dcache_align_mask;
- if (unalign) {
- memcpy(_tmp_cl, (void *)bbuf, unalign);
- len += unalign; /* inv entire cache line */
- }
-
- unalign = ebuf & arm_dcache_align_mask;
- if (unalign) {
- unalign = arm_dcache_align - unalign;
- memcpy(_tmp_clend, (void *)ebuf, unalign);
- len += unalign; /* inv entire cache line */
- }
- }
-
- /* inv are cache length aligned */
- cpu_dcache_inv_range(bbuf, len);
- l2cache_inv_range(bbuf, physaddr, len);
-
- if ((buf & arm_dcache_align_mask) ||
- (ebuf & arm_dcache_align_mask)) {
- unalign = (vm_offset_t)buf & arm_dcache_align_mask;
- if (unalign)
- memcpy((void *)bbuf, _tmp_cl, unalign);
-
- unalign = ebuf & arm_dcache_align_mask;
- if (unalign)
- memcpy((void *)ebuf, _tmp_clend,
- arm_dcache_align - unalign);
-
- intr_restore(s);
- }
- sl++;
- }
- break;
-#endif /* FIX_DMAP_BUS_DMASYNC_POSTREAD */
-
default:
break;
}
Copied: projects/bhyve_npt_pmap/sys/arm/conf/CUBIEBOARD2 (from r254063, head/sys/arm/conf/CUBIEBOARD2)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/bhyve_npt_pmap/sys/arm/conf/CUBIEBOARD2 Wed Aug 21 23:22:36 2013 (r254628, copy of r254063, head/sys/arm/conf/CUBIEBOARD2)
@@ -0,0 +1,133 @@
+# CUBIEBOARD2 -- Custom configuration for the CUBIEBOARD2 ARM development
+# platform, check out http://www.cubieboard.org
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files.
+# If you are in doubt as to the purpose or necessity of a line, check first
+# in NOTES.
+#
+# $FreeBSD$
+
+ident CUBIEBOARD2
+
+include "../allwinner/a20/std.a20"
+
+makeoptions MODULES_OVERRIDE=""
+makeoptions WITHOUT_MODULES="ahc"
+
+options HZ=100
+options SCHED_4BSD #4BSD scheduler
+options INET #InterNETworking
+options INET6 #IPv6 communications protocols
+options FFS #Berkeley Fast Filesystem
+options SOFTUPDATES #Enable FFS soft updates support
+options UFS_ACL #Support for access control lists
+options UFS_DIRHASH #Improve performance on big directories
+options MSDOSFS #MSDOS Filesystem
+options CD9660 #ISO 9660 Filesystem
+options PROCFS #Process filesystem (requires PSEUDOFS)
+options PSEUDOFS #Pseudo-filesystem framework
+options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
+options SCSI_DELAY=5000 #Delay (in ms) before probing SCSI
+options KTRACE #ktrace(1) support
+options SYSVSHM #SYSV-style shared memory
+options SYSVMSG #SYSV-style message queues
+options SYSVSEM #SYSV-style semaphores
+options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions
+options KBD_INSTALL_CDEV # install a CDEV entry in /dev
+options PREEMPTION
+options FREEBSD_BOOT_LOADER
+
+# Debugging
+makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
+options BREAK_TO_DEBUGGER
+#options VERBOSE_SYSINIT #Enable verbose sysinit messages
+options KDB
+options DDB #Enable the kernel debugger
+options INVARIANTS #Enable calls of extra sanity checking
+options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS
+options WITNESS #Enable checks to detect deadlocks and cycles
+options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed
+#options DIAGNOSTIC
+
+# NFS support
+#options NFSCL
+#options NFSSERVER #Network Filesystem Server
+#options NFSCLIENT #Network Filesystem Client
+
+# Uncomment this for NFS root
+#options NFS_ROOT #NFS usable as /, requires NFSCLIENT
+#options BOOTP_NFSROOT
+#options BOOTP_COMPAT
+#options BOOTP
+#options BOOTP_NFSV3
+#options BOOTP_WIRED_TO=cpsw0
+
+# MMC/SD/SDIO card slot support
+#device mmc # mmc/sd bus
+#device mmcsd # mmc/sd flash cards
+
+# Boot device is 2nd slice on MMC/SD card
+options ROOTDEVNAME=\"ufs:/dev/da0s2\"
+
+# ATA controllers
+#device ahci # AHCI-compatible SATA controllers
+#device ata # Legacy ATA/SATA controllers
+#options ATA_STATIC_ID # Static device numbering
+
+# Console and misc
+device uart
+device uart_ns8250
+device pty
+device snp
+device md
+device random # Entropy device
+
+# I2C support
+#device iicbus
+#device iic
+
+# GPIO
+device gpio
+
+device scbus # SCSI bus (required for SCSI)
+device da # Direct Access (disks)
+device pass
+
+# USB support
+device usb
+options USB_DEBUG
+#options USB_REQ_DEBUG
+#options USB_VERBOSE
+#device uhci
+#device ohci
+device ehci
+
+device umass
+
+# Ethernet
+device loop
+device ether
+device mii
+device smscphy
+#device cpsw
+device bpf
+
+# USB ethernet support, requires miibus
+device miibus
+
+# Flattened Device Tree
+options FDT
+options FDT_DTB_STATIC
+makeoptions FDT_DTS_FILE=cubieboard2.dts
+
Copied: projects/bhyve_npt_pmap/sys/boot/fdt/dts/cubieboard2.dts (from r254063, head/sys/boot/fdt/dts/cubieboard2.dts)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/bhyve_npt_pmap/sys/boot/fdt/dts/cubieboard2.dts Wed Aug 21 23:22:36 2013 (r254628, copy of r254063, head/sys/boot/fdt/dts/cubieboard2.dts)
@@ -0,0 +1,141 @@
+/*-
+ * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold at gmail.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/dts-v1/;
+
+/ {
+ model = "Cubietech Cubieboard2";
+ compatible = "cubietech,a20-cubieboard", "allwinner,sun7i-a20";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ interrupt-parent = <&GIC>;
+
+ memory {
+ device_type = "memory";
+ reg = < 0x40000000 0x20000000 >; /* 512MB RAM */
+ };
+
+ aliases {
+ soc = &SOC;
+ UART0 = &UART0;
+ };
+
+ SOC: a20 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "simple-bus";
+ ranges;
+ bus-frequency = <0>;
+
+ GIC: interrupt-controller at 01c81000 {
+ compatible = "arm,gic";
+ reg = <0x01c81000 0x1000>, /* Distributor Registers */
+ <0x01c82000 0x0100>; /* CPU Interface Registers */
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ cpu-cfg at 01c20000 {
+ compatible = "allwinner,sun7i-cpu-cfg";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = < 0x01c25c00 0x400 >;
+ };
+
+ ccm at 01c20000 {
+ compatible = "allwinner,sun4i-ccm";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = < 0x01c20000 0x400 >;
+ };
+
+ timer at 01c20c00 {
+ compatible = "allwinner,sun7i-timer";
+ reg = <0x01c20c00 0x90>;
+ interrupts = < 22 >;
+ interrupt-parent = <&GIC>;
+ clock-frequency = < 24000000 >;
+ };
+
+ watchdog at 01c20c90 {
+ compatible = "allwinner,sun4i-wdt";
+ reg = <0x01c20c90 0x10>;
+ };
+
+ GPIO: gpio at 01c20800 {
+ #gpio-cells = <3>;
+ compatible = "allwinner,sun4i-gpio";
+ gpio-controller;
+ reg =< 0x01c20800 0x400 >;
+ interrupts = < 28 >;
+ interrupt-parent = <&GIC>;
+ };
+
+ usb1: usb at 01c14000 {
+ compatible = "allwinner,usb-ehci", "usb-ehci";
+ reg = <0x01c14000 0x1000>;
+ interrupts = < 39 >;
+ interrupt-parent = <&GIC>;
+ };
+
+ usb2: usb at 01c1c000 {
+ compatible = "allwinner,usb-ehci", "usb-ehci";
+ reg = <0x01c1c000 0x1000>;
+ interrupts = < 40 >;
+ interrupt-parent = <&GIC>;
+ };
+
+ sata at 01c18000 {
+ compatible = "allwinner,ahci";
+ reg = <0x01c18000 0x1000>;
+ interrupts = <56>;
+ interrupt-parent = <&GIC>;
+ };
+
+ UART0: serial at 01c28000 {
+ status = "okay";
+ compatible = "ns16550";
+ reg = <0x01c28000 0x400>;
+ reg-shift = <2>;
+ interrupts = <1>;
+ interrupt-parent = <&GIC>;
+ current-speed = <115200>;
+ clock-frequency = < 24000000 >;
+ busy-detect = <1>;
+ broken-txfifo = <1>;
+ };
+ };
+
+ chosen {
+ bootargs = "-v";
+ stdin = "UART0";
+ stdout = "UART0";
+ };
+};
+
Modified: projects/bhyve_npt_pmap/sys/cam/cam_periph.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/cam/cam_periph.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/cam/cam_periph.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -258,7 +258,7 @@ failure:
break;
case 3:
CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph destroyed\n"));
- xpt_remove_periph(periph, /*topology_lock_held*/ 0);
+ xpt_remove_periph(periph);
/* FALLTHROUGH */
case 2:
xpt_lock_buses();
@@ -645,7 +645,7 @@ camperiphfree(struct cam_periph *periph)
TAILQ_REMOVE(&(*p_drv)->units, periph, unit_links);
(*p_drv)->generation++;
- xpt_remove_periph(periph, /*topology_lock_held*/ 1);
+ xpt_remove_periph(periph);
xpt_unlock_buses();
CAM_DEBUG(periph->path, CAM_DEBUG_INFO, ("Periph destroyed\n"));
Modified: projects/bhyve_npt_pmap/sys/cam/cam_xpt.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/cam/cam_xpt.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/cam/cam_xpt.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -96,7 +96,6 @@ typedef enum {
struct xpt_softc {
xpt_flags flags;
- u_int32_t xpt_generation;
/* number of high powered commands that can go through right now */
STAILQ_HEAD(highpowerlist, cam_ed) highpowerq;
@@ -608,24 +607,11 @@ xptdoioctl(struct cdev *dev, u_long cmd,
struct periph_driver **p_drv;
char *name;
u_int unit;
- u_int cur_generation;
int base_periph_found;
- int splbreaknum;
ccb = (union ccb *)addr;
unit = ccb->cgdl.unit_number;
name = ccb->cgdl.periph_name;
- /*
- * Every 100 devices, we want to drop our lock protection to
- * give the software interrupt handler a chance to run.
- * Most systems won't run into this check, but this should
- * avoid starvation in the software interrupt handler in
- * large systems.
- */
- splbreaknum = 100;
-
- ccb = (union ccb *)addr;
-
base_periph_found = 0;
/*
@@ -639,8 +625,6 @@ xptdoioctl(struct cdev *dev, u_long cmd,
/* Keep the list from changing while we traverse it */
xpt_lock_buses();
-ptstartover:
- cur_generation = xsoftc.xpt_generation;
/* first find our driver in the list of drivers */
for (p_drv = periph_drivers; *p_drv != NULL; p_drv++)
@@ -667,15 +651,8 @@ ptstartover:
for (periph = TAILQ_FIRST(&(*p_drv)->units); periph != NULL;
periph = TAILQ_NEXT(periph, unit_links)) {
- if (periph->unit_number == unit) {
+ if (periph->unit_number == unit)
break;
- } else if (--splbreaknum == 0) {
- xpt_unlock_buses();
- xpt_lock_buses();
- splbreaknum = 100;
- if (cur_generation != xsoftc.xpt_generation)
- goto ptstartover;
- }
}
/*
* If we found the peripheral driver that the user passed
@@ -1015,15 +992,11 @@ xpt_add_periph(struct cam_periph *periph
SLIST_INSERT_HEAD(periph_head, periph, periph_links);
}
- xpt_lock_buses();
- xsoftc.xpt_generation++;
- xpt_unlock_buses();
-
return (status);
}
void
-xpt_remove_periph(struct cam_periph *periph, int topology_lock_held)
+xpt_remove_periph(struct cam_periph *periph)
{
struct cam_ed *device;
@@ -1043,14 +1016,6 @@ xpt_remove_periph(struct cam_periph *per
SLIST_REMOVE(periph_head, periph, cam_periph, periph_links);
}
-
- if (topology_lock_held == 0)
- xpt_lock_buses();
-
- xsoftc.xpt_generation++;
-
- if (topology_lock_held == 0)
- xpt_unlock_buses();
}
Modified: projects/bhyve_npt_pmap/sys/cam/cam_xpt_periph.h
==============================================================================
--- projects/bhyve_npt_pmap/sys/cam/cam_xpt_periph.h Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/cam/cam_xpt_periph.h Wed Aug 21 23:22:36 2013 (r254628)
@@ -42,8 +42,7 @@ void xpt_polled_action(union ccb *ccb);
void xpt_release_ccb(union ccb *released_ccb);
void xpt_schedule(struct cam_periph *perph, u_int32_t new_priority);
int32_t xpt_add_periph(struct cam_periph *periph);
-void xpt_remove_periph(struct cam_periph *periph,
- int topology_lock_held);
+void xpt_remove_periph(struct cam_periph *periph);
void xpt_announce_periph(struct cam_periph *periph,
char *announce_string);
void xpt_announce_quirks(struct cam_periph *periph,
Modified: projects/bhyve_npt_pmap/sys/cam/scsi/scsi_da.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/cam/scsi/scsi_da.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/cam/scsi/scsi_da.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -2820,6 +2820,7 @@ cmd6workaround(union ccb *ccb)
xpt_print(ccb->ccb_h.path,
"SYNCHRONIZE CACHE(10) not supported.\n");
softc->quirks |= DA_Q_NO_SYNC_CACHE;
+ softc->disk->d_flags &= ~DISKFLAG_CANFLUSHCACHE;
return (0);
}
Modified: projects/bhyve_npt_pmap/sys/i386/conf/GENERIC
==============================================================================
--- projects/bhyve_npt_pmap/sys/i386/conf/GENERIC Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/i386/conf/GENERIC Wed Aug 21 23:22:36 2013 (r254628)
@@ -75,7 +75,7 @@ options INCLUDE_CONFIG_FILE # Inclu
# Debugging support. Always need this:
options KDB # Enable kernel debugger support.
# For minimum debugger support (stable branch) use:
-#options KDB_TRACE # Print a stack trace for a panic.
+options KDB_TRACE # Print a stack trace for a panic.
# For full debugger support use this instead:
options DDB # Support DDB.
options GDB # Support remote GDB.
Modified: projects/bhyve_npt_pmap/sys/ia64/conf/GENERIC
==============================================================================
--- projects/bhyve_npt_pmap/sys/ia64/conf/GENERIC Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/ia64/conf/GENERIC Wed Aug 21 23:22:36 2013 (r254628)
@@ -66,7 +66,7 @@ options _KPOSIX_PRIORITY_SCHEDULING # P
# Debugging support. Always need this:
options KDB # Enable kernel debugger support.
# For minimum debugger support (stable branch) use:
-#options KDB_TRACE # Print a stack trace for a panic.
+options KDB_TRACE # Print a stack trace for a panic.
# For full debugger support use this instead:
options DDB # Support DDB
options GDB # Support remote GDB
Modified: projects/bhyve_npt_pmap/sys/kern/kern_poll.c
==============================================================================
--- projects/bhyve_npt_pmap/sys/kern/kern_poll.c Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/kern/kern_poll.c Wed Aug 21 23:22:36 2013 (r254628)
@@ -169,7 +169,7 @@ static int user_frac_sysctl(SYSCTL_HANDL
error = sysctl_handle_int(oidp, &val, 0, req);
if (error || !req->newptr )
return (error);
- if (val < 0 || val > 99)
+ if (val > 99)
return (EINVAL);
mtx_lock(&poll_mtx);
Modified: projects/bhyve_npt_pmap/sys/powerpc/conf/GENERIC
==============================================================================
--- projects/bhyve_npt_pmap/sys/powerpc/conf/GENERIC Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/powerpc/conf/GENERIC Wed Aug 21 23:22:36 2013 (r254628)
@@ -77,7 +77,7 @@ options INCLUDE_CONFIG_FILE # Inclu
# Debugging support. Always need this:
options KDB # Enable kernel debugger support.
# For minimum debugger support (stable branch) use:
-#options KDB_TRACE # Print a stack trace for a panic.
+options KDB_TRACE # Print a stack trace for a panic.
# For full debugger support use this instead:
options DDB #Support DDB
#options DEADLKRES #Enable the deadlock resolver
Modified: projects/bhyve_npt_pmap/sys/sparc64/conf/GENERIC
==============================================================================
--- projects/bhyve_npt_pmap/sys/sparc64/conf/GENERIC Wed Aug 21 23:04:48 2013 (r254627)
+++ projects/bhyve_npt_pmap/sys/sparc64/conf/GENERIC Wed Aug 21 23:22:36 2013 (r254628)
@@ -69,7 +69,7 @@ options INCLUDE_CONFIG_FILE # Include t
# Debugging support. Always need this:
options KDB # Enable kernel debugger support.
# For minimum debugger support (stable branch) use:
-#options KDB_TRACE # Print a stack trace for a panic.
+options KDB_TRACE # Print a stack trace for a panic.
# For full debugger support use this instead:
options DDB # Support DDB.
options GDB # Support remote GDB.
More information about the svn-src-projects
mailing list