[PATCH v2 5/6] SD card : Changes for SD card driver
Mudit Jain
muditjain18011995 at gmail.com
Mon Aug 22 04:04:17 UTC 2016
---
freebsd/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c | 21 +++++++++++++++++++++
freebsd/sys/dev/mmc/mmc.c | 2 +-
freebsd/sys/dev/sdhci/sdhci.c | 6 ++++++
freebsd/sys/dev/sdhci/sdhci.h | 2 +-
rtemsbsd/include/bsp/nexus-devices.h | 20 +++++++++++++++++++-
5 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/freebsd/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c b/freebsd/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
index 4844f19..9ba83f3 100644
--- a/freebsd/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
+++ b/freebsd/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
@@ -43,9 +43,11 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
+#ifndef __rtems__
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
+#endif /* __rtems__ */
#include <dev/mmc/bridge.h>
#include <dev/mmc/mmcreg.h>
@@ -55,9 +57,15 @@ __FBSDID("$FreeBSD$");
#include <rtems/bsd/local/sdhci_if.h>
#include "bcm2835_dma.h"
+#ifndef __rtems__
#include <arm/broadcom/bcm2835/bcm2835_mbox_prop.h>
+#endif /* __rtems__ */
#include "bcm2835_vcbus.h"
+#ifdef __rtems__
+#define BUS_SPACE_PHYSADDR(res, offs) ((u_int)(rman_get_start(res)+(offs)))
+#endif /* __rtems__ */
+
#define BCM2835_DEFAULT_SDHCI_FREQ 50
#define BCM_SDHCI_BUFFER_SIZE 512
@@ -125,11 +133,13 @@ static int
bcm_sdhci_probe(device_t dev)
{
+#ifndef __rtems__
if (!ofw_bus_status_okay(dev))
return (ENXIO);
if (!ofw_bus_is_compatible(dev, "broadcom,bcm2835-sdhci"))
return (ENXIO);
+#endif /* __rtems__ */
device_set_desc(dev, "Broadcom 2708 SDHCI controller");
return (BUS_PROBE_DEFAULT);
@@ -140,13 +150,16 @@ bcm_sdhci_attach(device_t dev)
{
struct bcm_sdhci_softc *sc = device_get_softc(dev);
int rid, err;
+#ifndef __rtems__
phandle_t node;
pcell_t cell;
+#endif /* __rtems__ */
u_int default_freq;
sc->sc_dev = dev;
sc->sc_req = NULL;
+#ifndef __rtems__
err = bcm2835_mbox_set_power_state(BCM2835_MBOX_POWER_ID_EMMC,
TRUE);
if (err != 0) {
@@ -168,6 +181,7 @@ bcm_sdhci_attach(device_t dev)
sizeof(cell))) > 0)
default_freq = cell / 1000000;
}
+#endif /* __rtems__ */
if (default_freq == 0)
default_freq = BCM2835_DEFAULT_SDHCI_FREQ;
@@ -216,6 +230,7 @@ bcm_sdhci_attach(device_t dev)
sdhci_init_slot(dev, &sc->sc_slot, 0);
+#ifndef __rtems__
sc->sc_dma_ch = bcm_dma_allocate(BCM_DMA_CH_ANY);
if (sc->sc_dma_ch == BCM_DMA_CH_INVALID)
goto fail;
@@ -243,6 +258,7 @@ bcm_sdhci_attach(device_t dev)
sc->sc_sdhci_buffer_phys = BUS_SPACE_PHYSADDR(sc->sc_mem_res,
SDHCI_BUFFER);
+#endif /* __rtems__ */
bus_generic_probe(dev);
bus_generic_attach(dev);
@@ -671,7 +687,12 @@ static driver_t bcm_sdhci_driver = {
sizeof(struct bcm_sdhci_softc),
};
+#ifndef __rtems__
DRIVER_MODULE(sdhci_bcm, simplebus, bcm_sdhci_driver, bcm_sdhci_devclass, 0, 0);
MODULE_DEPEND(sdhci_bcm, sdhci, 1, 1, 1);
DRIVER_MODULE(mmc, sdhci_bcm, mmc_driver, mmc_devclass, NULL, NULL);
MODULE_DEPEND(sdhci_bcm, mmc, 1, 1, 1);
+#else /* __rtems__ */
+DRIVER_MODULE(sdhci_bcm, nexus, bcm_sdhci_driver, bcm_sdhci_devclass, 0, 0);
+MODULE_DEPEND(sdhci_bcm, sdhci, 1, 1, 1);
+#endif /* __rtems__ */
\ No newline at end of file
diff --git a/freebsd/sys/dev/mmc/mmc.c b/freebsd/sys/dev/mmc/mmc.c
index 7a94dc4..ac3f1e0 100644
--- a/freebsd/sys/dev/mmc/mmc.c
+++ b/freebsd/sys/dev/mmc/mmc.c
@@ -1734,4 +1734,4 @@ static devclass_t mmc_devclass;
DRIVER_MODULE(mmc, at91_mci, mmc_driver, mmc_devclass, NULL, NULL);
DRIVER_MODULE(mmc, dw_mmc, mmc_driver, mmc_devclass, NULL, NULL);
-DRIVER_MODULE(mmc, sdhci, mmc_driver, mmc_devclass, NULL, NULL);
+DRIVER_MODULE(mmc, sdhci_bcm, mmc_driver, mmc_devclass, NULL, NULL);
diff --git a/freebsd/sys/dev/sdhci/sdhci.c b/freebsd/sys/dev/sdhci/sdhci.c
index 924f06d..91bcc83 100644
--- a/freebsd/sys/dev/sdhci/sdhci.c
+++ b/freebsd/sys/dev/sdhci/sdhci.c
@@ -682,7 +682,11 @@ int sdhci_init_slot(
slot->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;
}
+#ifndef __rtems__
slot->host.f_min = SDHCI_MIN_FREQ( slot->bus, slot );
+#elif defined(LIBBSP_ARM_RASPBERRYPI_BSP_H)
+ slot->host.f_min = 400000;
+#endif
slot->host.f_max = slot->max_clk;
slot->host.host_ocr = 0;
@@ -739,10 +743,12 @@ int sdhci_init_slot(
}
slot->timeout = 10;
+#ifndef __rtems__
SYSCTL_ADD_INT( device_get_sysctl_ctx( slot->bus ),
SYSCTL_CHILDREN( device_get_sysctl_tree( slot->bus ) ), OID_AUTO,
"timeout", CTLFLAG_RW, &slot->timeout, 0,
"Maximum timeout for SDHCI transfers (in secs)" );
+#endif /* __rtems__ */
TASK_INIT( &slot->card_task, 0, sdhci_card_task, slot );
callout_init( &slot->card_callout, 1 );
callout_init_mtx( &slot->timeout_callout, &slot->mtx, 0 );
diff --git a/freebsd/sys/dev/sdhci/sdhci.h b/freebsd/sys/dev/sdhci/sdhci.h
index 91b8b76..d54c093 100644
--- a/freebsd/sys/dev/sdhci/sdhci.h
+++ b/freebsd/sys/dev/sdhci/sdhci.h
@@ -276,7 +276,7 @@ struct sdhci_slot {
device_t dev; /* Slot device */
u_char num; /* Slot number */
u_char opt; /* Slot options */
-#define SDHCI_HAVE_DMA 1
+#define SDHCI_HAVE_DMA 0
#define SDHCI_PLATFORM_TRANSFER 2
u_char version;
int timeout; /* Transfer timeout */
diff --git a/rtemsbsd/include/bsp/nexus-devices.h b/rtemsbsd/include/bsp/nexus-devices.h
index decd042..d2a2852 100644
--- a/rtemsbsd/include/bsp/nexus-devices.h
+++ b/rtemsbsd/include/bsp/nexus-devices.h
@@ -183,6 +183,24 @@ RTEMS_BSD_DEFINE_NEXUS_DEVICE(tsec, 0, RTEMS_ARRAY_SIZE(tsec0_res),
#include <bsp/raspberrypi.h>
#include <bsp/irq.h>
+static const rtems_bsd_device_resource rpi_emmc_res[] = {
+ {
+ .type = RTEMS_BSD_RES_MEMORY,
+ .start_request = 0,
+ .start_actual = BCM2835_EMMC_BASE
+ }, {
+ .type = RTEMS_BSD_RES_IRQ,
+ .start_request = 0,
+ .start_actual = 62
+ }
+};
+
+RTEMS_BSD_DEFINE_NEXUS_DEVICE(sdhci_bcm, 0, RTEMS_ARRAY_SIZE(rpi_emmc_res),
+ &rpi_emmc_res[0]);
+
+SYSINIT_DRIVER_REFERENCE(mmc, sdhci_bcm);
+SYSINIT_DRIVER_REFERENCE(mmcsd, mmc);
+
static const rtems_bsd_device_resource rpi_dma_res[] = {
{
.type = RTEMS_BSD_RES_MEMORY,
@@ -196,6 +214,6 @@ static const rtems_bsd_device_resource rpi_dma_res[] = {
};
RTEMS_BSD_DEFINE_NEXUS_DEVICE(bcm_dma, 0, RTEMS_ARRAY_SIZE(rpi_dma_res),
-&rpi_dma_res[0]);
+ &rpi_dma_res[0]);
#endif
--
1.9.1
More information about the devel
mailing list