<div dir="ltr"><div><div>Hi all,<br><br></div><div>I have ported the code from the present FreeBSD. <br><br></div><div>Link : <a href="https://github.com/spark1729/rtems-libbsd/commits/rpi_sd_card" target="_blank">https://github.com/spark1729/rtems-libbsd/commits/rpi_sd_card</a><br><br></div><div>Kindly review the same and suggest changes. <br></div><div><br></div><div>The commits are a bit unstructured, the second last one being a huge one. I will be breaking it down into smaller and logical patches while submitting. <br></div><div><br></div><div>Files changed/added in the three commits are as follows : <br><br>freebsd/sys/dev/ofw/ofw_bus.h<br>freebsd/sys/dev/ofw/ofw_bus_if.c<br>freebsd/sys/dev/ofw/ofw_bus_if.h<br>freebsd/sys/dev/ofw/ofw_bus_subr.c<br>freebsd/sys/dev/ofw/ofw_bus_subr.h<br><br></div><div>freebsd/sys/sys/queue.h<br><br>freebsd/sys/contrib/libfdt/libfdt_env.h<br>freebsd/sys/dev/fdt/fdt_common.c<br>freebsd/sys/dev/fdt/fdt_common.h<br>freebsd/sys/dev/ofw/ofw_bus_subr.c<br>freebsd/sys/sys/slicer.h<br><br>freebsd/sys/dev/mbox/mbox_if.c<br>freebsd/sys/dev/mbox/mbox_if.h<br>freebsd/sys/dev/ofw/ofw_if.c<br>freebsd/sys/dev/ofw/ofw_if.h<br>freebsd/sys/dev/ofw/ofwvar.h<br>freebsd/sys/dev/ofw/openfirm.c<br>freebsd/sys/dev/ofw/openfirm.h<br>freebsd/sys/dev/sdhci/bcm2835_dma.c<br>freebsd/sys/dev/sdhci/bcm2835_dma.h<br>freebsd/sys/dev/sdhci/bcm2835_mbox.c<br>freebsd/sys/dev/sdhci/bcm2835_mbox.h<br>freebsd/sys/dev/sdhci/bcm2835_mbox_prop.h<br>freebsd/sys/dev/sdhci/bcm2835_sdhci.c<br>freebsd/sys/dev/sdhci/bcm2835_vcbus.h<br>freebsd/sys/dev/sdhci/sdhci.c<br>freebsd/sys/dev/sdhci/sdhci.h<br>freebsd/sys/dev/sdhci/sdhci_if.c<br>freebsd/sys/dev/sdhci/sdhci_if.h<br><br></div><div>Files added to the build process [ libbsd_waf.py ] <br><br>freebsd/sys/dev/ofw/ofw_bus_if.c<br>freebsd/sys/dev/ofw/ofw_bus_subr.c<br>freebsd/sys/dev/fdt/fdt_common.c<br>freebsd/sys/dev/ofw/ofw_bus_subr.c<br>freebsd/sys/dev/mbox/mbox_if.c<br>freebsd/sys/dev/ofw/ofw_if.c<br>freebsd/sys/dev/ofw/openfirm.c<br>freebsd/sys/dev/sdhci/bcm2835_dma.c<br>freebsd/sys/dev/sdhci/bcm2835_mbox.c<br>freebsd/sys/dev/sdhci/bcm2835_sdhci.c<br>freebsd/sys/dev/sdhci/sdhci.c<br>freebsd/sys/dev/sdhci/sdhci_if.c<br><br></div><div>Errors and how they were resolved :<br></div><div>1.  The *_if.m files were converted into *_if.c and *_if.h using the following script : <a href="http://opensource.apple.com//source/smb/smb-66/kernel/sys5/kern/makeobjops.pl?txt">Link </a><br></div>2.  fdt and ofw support was added as the driver had dependencies on that.<br></div>3.  <i>taskqueue_swi_giant</i> global is not provided by RTEMS. That was solved by adding a new field to the <i>sdhci slot</i> structure - <i>sdhci_tq</i>. <br><div><div><div>4.  BUS_PHYSADDR used in bcm_sdhci.c is a macro defined in arm/include/bus.h. This macro is copied bcm_sdhci.c. <i><br><br></i></div><div>Presently the SD driver module is built from  bcm_sdhci.c using the generic and other functions defined in sdhci.c. However for modularity a different<br><br></div><div>Question : <br></div><div>1. Presently I have just kept the bcm2835 specific code in /dev/sdhci/ directory. I don't think that would be ideal, I wanted to discuss the positioning of the bcm2835 specific files.<br></div><div>2. Presently the SD driver module is built from  bcm_sdhci.c using the 
generic and other functions defined in sdhci.c. Is this fine ? <br></div><div>3. I have used the <i>.start_actual </i>in nexus-devices.h for <i>rpi_dma_res </i>as<i> 0x7e007000. </i>Is this the correct value ?<a href="https://www.kernel.org/doc/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt"> Link</a><br></div><div>Note : I have not added the macro LIBBSP_ARM_RASPBERRYPI_BSP_H to bcm2835 specific code. I will be doing that.  </div><div><br></div><div>waf builds everything that was added successfully. <br></div><div><i><br></i></div><div>Thanks <br></div><div>Mudit<br></div><div><br></div></div></div></div>