Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144447700
D6215.id15918.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D6215.id15918.diff
View Options
Index: sys/arm/mv/mv_machdep.c
===================================================================
--- sys/arm/mv/mv_machdep.c
+++ sys/arm/mv/mv_machdep.c
@@ -277,7 +277,7 @@
static int
platform_sram_devmap(struct devmap_entry *map)
{
-#if !defined(SOC_MV_ARMADAXP)
+#if !defined(SOC_MV_ARMADAXP) && !defined(SOC_MV_ARMADA38X)
phandle_t child, root;
u_long base, size;
/*
Index: sys/dev/cesa/cesa.h
===================================================================
--- sys/dev/cesa/cesa.h
+++ sys/dev/cesa/cesa.h
@@ -257,7 +257,9 @@
STAILQ_HEAD(, cesa_session) sc_free_sessions;
/* CESA SRAM Address */
- bus_addr_t sc_sram_base;
+ bus_addr_t sc_sram_base_pa;
+ bus_space_handle_t sc_sram_base_va;
+ bus_size_t sc_sram_size;
};
struct cesa_chain_info {
Index: sys/dev/cesa/cesa.c
===================================================================
--- sys/dev/cesa/cesa.c
+++ sys/dev/cesa/cesa.c
@@ -27,15 +27,15 @@
/*
* CESA SRAM Memory Map:
*
- * +------------------------+ <= sc->sc_sram_base + CESA_SRAM_SIZE
+ * +------------------------+ <= sc->sc_sram_base_va + CESA_SRAM_SIZE
* | |
* | DATA |
* | |
- * +------------------------+ <= sc->sc_sram_base + CESA_DATA(0)
+ * +------------------------+ <= sc->sc_sram_base_va + CESA_DATA(0)
* | struct cesa_sa_data |
* +------------------------+
* | struct cesa_sa_hdesc |
- * +------------------------+ <= sc->sc_sram_base
+ * +------------------------+ <= sc->sc_sram_base_va
*/
#include <sys/cdefs.h>
@@ -55,6 +55,7 @@
#include <machine/bus.h>
#include <machine/intr.h>
#include <machine/resource.h>
+#include <machine/fdt.h>
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/ofw_bus.h>
@@ -373,7 +374,7 @@
cesa_tdma_copyin_sa_data(struct cesa_softc *sc, struct cesa_request *cr)
{
- return (cesa_tdma_copy(sc, sc->sc_sram_base +
+ return (cesa_tdma_copy(sc, sc->sc_sram_base_pa +
sizeof(struct cesa_sa_hdesc), cr->cr_csd_paddr,
sizeof(struct cesa_sa_data)));
}
@@ -382,7 +383,7 @@
cesa_tdma_copyout_sa_data(struct cesa_softc *sc, struct cesa_request *cr)
{
- return (cesa_tdma_copy(sc, cr->cr_csd_paddr, sc->sc_sram_base +
+ return (cesa_tdma_copy(sc, cr->cr_csd_paddr, sc->sc_sram_base_pa +
sizeof(struct cesa_sa_hdesc), sizeof(struct cesa_sa_data)));
}
@@ -390,7 +391,7 @@
cesa_tdma_copy_sdesc(struct cesa_softc *sc, struct cesa_sa_desc *csd)
{
- return (cesa_tdma_copy(sc, sc->sc_sram_base, csd->csd_cshd_paddr,
+ return (cesa_tdma_copy(sc, sc->sc_sram_base_pa, csd->csd_cshd_paddr,
sizeof(struct cesa_sa_hdesc)));
}
@@ -566,14 +567,14 @@
bsize = MIN(seg->ds_len, cp->cp_size - cp->cp_offset);
if (bsize > 0) {
- ctd = cesa_tdma_copy(sc, sc->sc_sram_base +
+ ctd = cesa_tdma_copy(sc, sc->sc_sram_base_pa +
CESA_DATA(cp->cp_offset), seg->ds_addr, bsize);
if (!ctd)
return (-ENOMEM);
STAILQ_INSERT_TAIL(&cp->cp_copyin, ctd, ctd_stq);
- ctd = cesa_tdma_copy(sc, seg->ds_addr, sc->sc_sram_base +
+ ctd = cesa_tdma_copy(sc, seg->ds_addr, sc->sc_sram_base_pa +
CESA_DATA(cp->cp_offset), bsize);
if (!ctd)
return (-ENOMEM);
@@ -950,22 +951,33 @@
{
phandle_t sram_node;
ihandle_t sram_ihandle;
- pcell_t sram_handle, sram_reg;
+ pcell_t sram_handle, sram_reg[2];
+ int rv;
- if (OF_getprop(ofw_bus_get_node(sc->sc_dev), "sram-handle",
- (void *)&sram_handle, sizeof(sram_handle)) <= 0)
- return (ENXIO);
+ rv = OF_getprop(ofw_bus_get_node(sc->sc_dev), "sram-handle",
+ (void *)&sram_handle, sizeof(sram_handle));
+ if (rv <= 0)
+ return (rv);
sram_ihandle = (ihandle_t)sram_handle;
sram_ihandle = fdt32_to_cpu(sram_ihandle);
sram_node = OF_instance_to_package(sram_ihandle);
- if (OF_getprop(sram_node, "reg", (void *)&sram_reg,
- sizeof(sram_reg)) <= 0)
- return (ENXIO);
+ rv = OF_getprop(sram_node, "reg", (void *)sram_reg, sizeof(sram_reg));
+ if (rv <= 0)
+ return (rv);
- sc->sc_sram_base = fdt32_to_cpu(sram_reg);
+ sc->sc_sram_base_pa = fdt32_to_cpu(sram_reg[0]);
+ /* Store SRAM size to be able to unmap in detach() */
+ sc->sc_sram_size = fdt32_to_cpu(sram_reg[1]);
+#if defined(SOC_MV_ARMADA38X)
+ /* SRAM memory was not mapped in platform_sram_devmap(), map it now */
+ rv = bus_space_map(fdtbus_bs_tag, sc->sc_sram_base_pa, sc->sc_sram_size,
+ 0, &(sc->sc_sram_base_va));
+ if (rv != 0)
+ return (rv);
+#endif
return (0);
}
@@ -1066,7 +1078,7 @@
NULL, cesa_intr, sc, &(sc->sc_icookie));
if (error) {
device_printf(dev, "could not setup engine completion irq\n");
- goto err1;
+ goto err2;
}
/* Create DMA tag for processed data */
@@ -1081,13 +1093,13 @@
NULL, NULL, /* lockfunc, lockfuncarg */
&sc->sc_data_dtag); /* dmat */
if (error)
- goto err2;
+ goto err3;
/* Initialize data structures: TDMA Descriptors Pool */
error = cesa_alloc_dma_mem(sc, &sc->sc_tdesc_cdm,
CESA_TDMA_DESCRIPTORS * sizeof(struct cesa_tdma_hdesc));
if (error)
- goto err3;
+ goto err4;
STAILQ_INIT(&sc->sc_free_tdesc);
for (i = 0; i < CESA_TDMA_DESCRIPTORS; i++) {
@@ -1103,7 +1115,7 @@
error = cesa_alloc_dma_mem(sc, &sc->sc_sdesc_cdm,
CESA_SA_DESCRIPTORS * sizeof(struct cesa_sa_hdesc));
if (error)
- goto err4;
+ goto err5;
STAILQ_INIT(&sc->sc_free_sdesc);
for (i = 0; i < CESA_SA_DESCRIPTORS; i++) {
@@ -1119,7 +1131,7 @@
error = cesa_alloc_dma_mem(sc, &sc->sc_requests_cdm,
CESA_REQUESTS * sizeof(struct cesa_sa_data));
if (error)
- goto err5;
+ goto err6;
STAILQ_INIT(&sc->sc_free_requests);
STAILQ_INIT(&sc->sc_ready_requests);
@@ -1141,7 +1153,7 @@
sc->sc_requests[i].cr_dmap);
} while (i--);
- goto err6;
+ goto err7;
}
STAILQ_INSERT_TAIL(&sc->sc_free_requests, &sc->sc_requests[i],
@@ -1187,7 +1199,7 @@
sc->sc_cid = crypto_get_driverid(dev, CRYPTOCAP_F_HARDWARE);
if (sc->sc_cid) {
device_printf(dev, "could not get crypto driver id\n");
- goto err7;
+ goto err8;
}
crypto_register(sc->sc_cid, CRYPTO_AES_CBC, 0, 0);
@@ -1199,20 +1211,24 @@
crypto_register(sc->sc_cid, CRYPTO_SHA1_HMAC, 0, 0);
return (0);
-err7:
+err8:
for (i = 0; i < CESA_REQUESTS; i++)
bus_dmamap_destroy(sc->sc_data_dtag,
sc->sc_requests[i].cr_dmap);
-err6:
+err7:
cesa_free_dma_mem(&sc->sc_requests_cdm);
-err5:
+err6:
cesa_free_dma_mem(&sc->sc_sdesc_cdm);
-err4:
+err5:
cesa_free_dma_mem(&sc->sc_tdesc_cdm);
-err3:
+err4:
bus_dma_tag_destroy(sc->sc_data_dtag);
-err2:
+err3:
bus_teardown_intr(dev, sc->sc_res[1], sc->sc_icookie);
+err2:
+#if defined(SOC_MV_ARMADA38X)
+ bus_space_unmap(fdtbus_bs_tag, sc->sc_sram_base_va, sc->sc_sram_size);
+#endif
err1:
bus_release_resources(dev, cesa_res_spec, sc->sc_res);
err0:
@@ -1260,6 +1276,10 @@
/* Relase I/O and IRQ resources */
bus_release_resources(dev, cesa_res_spec, sc->sc_res);
+#if defined(SOC_MV_ARMADA38X)
+ /* Unmap SRAM memory */
+ bus_space_unmap(fdtbus_bs_tag, sc->sc_sram_base_va, sc->sc_sram_size);
+#endif
/* Destroy mutexes */
mtx_destroy(&sc->sc_sessions_lock);
mtx_destroy(&sc->sc_requests_lock);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Feb 9, 12:09 PM (1 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28576671
Default Alt Text
D6215.id15918.diff (6 KB)
Attached To
Mode
D6215: Map CESA SRAM memory in driver attach for Armada38x
Attached
Detach File
Event Timeline
Log In to Comment