CAM, FreeBSD, GSoC, mmccam, RTEMS, SDIO

Backporting MMCCAM/SDIO framework to FreeBSD head 642b174dadd

My phase 2, GSoC objectives includes Backporting the current(rev: d6756a3ac8 ) MMCCAM framework to FreeBSD head 642b174dadd and then importing it to RTEMS. This post mainly concerns with intricacies and workarounds during the backporting process.

Backporting is a process that enables old kernels run a latest driver. MMCCAM framework is one such enhancement in the past few months that enables FreeBSD to talk to devices behind the SDIO bus. It’s a major architectural change, that enables further driver development for devices on SDIO bus.

So, first step during backporting is to finalize the revisions from which driver will be imported(d6756a3ac8 in my case) and to the one it will be applied(642b174dadd). It’s really important to select these versions wisely, only after substantial testing to ensure bug free working of the driver.

Next step is to make a list of commits that we are concerned with i.e those which are used to introduce driver into the kernel. In my case,  github’s web interface was used to view all the commits like: https://github.com/freebsd/freebsd/commits/master/sys/cam .

Now, among these , commits are selected based on the following criteria:

  • Either it’s a small bug fix in CAM framework or the one that has no functional changes like: changes in comments/license etc.
  • These commits should only affect the CAM core files or applies directly to MMCCAM/SDIO stack. Major changes in CAM core files aren’t appreciated as they require updating CAM’s dependencies too, along with other CAM based frameworks like NVME,ATA etc. However, there were situations when updating dependencies becomes a necessity. For that, we have to first find all the dependencies on which CAM depends on and the ones which are dependent on CAM.

Finding dependencies

#include dependencies can be found by following methods:

View https://stackoverflow.com/questions/42308/tool-to-track-include-dependencies for other option. I used clangs -MM option to find all CAM dependencies. Dependencies, in my case mainly includes user space tools like camcontrol etc and CAM based frameworks(ATA,NVME,SCSI). Look at my patch used to import MMCCAM stack here, changes in sys/cam/ata/* , sys/cam/nvme/* , sys/cam/scsi/*, sys/dev/aic7xxx/* , sys/dev/drm/*, usr.bin/sdiotool/* are all minor changes in dependencies.


Now, we have the commits we want to apply. We can now apply them one by one and build kernel (With -MM option, if you are using that) to see any error/unmet dependency. I used git cherry-pick (here) to selectively apply commits.

Few workarounds:

While backporting MMCCAM stack, there were few workarounds which have to be taken care of when upgrading rtems-libbsd:

    • See commit e437fbd6d8c09cab8d2dcdcddd75834370e08e02 which is an CAM core API change and further require changes in all it’s dependencies, so i havn’t applied it. In short. due to this commit cam_periph_acquire returns 0(earlier it was returning CAM_REQ_CMP) on successful device acquire. Since this was skipped, new code added into MMCCAM stack needs some changes like look at line 423 of:  https://github.com/freebsd/freebsd/commit/acc25b4abd2f47032d0235deb0259097f48c30e9#diff-23780dec68cbcc506469c42e8c73f93eR423 here cam_periph_acquire(periph) != 0  has to be replaced with cam_periph_acquire(periph) != CAM_REQ_CMP . Similarly other occurrences of this function has to be changes.
    • All changes in user space  tools like camcontrol are not applied, mainly the ones which further require change in other modules, so it might not work properly. However, ‘camcontrol devlist’ is working correctly to scan and list cards. This is a bit irrelevant for the end purpose of porting it to RTEMS. similarly other userspace tools like sdiotool,mmcnull controller may not work as expected.

Building the kernel with backported MMCCAM stack

To build kernel with backported MMCCAM stack:

  • Grab the Freebsd-current repository and checkout to tree 642b174dadd
  • Grab the patch(here) and apply it to the repository.
  • Build the kernel with GENERIC-MMCCAM config file
  • Test the image and it will probably stop abruptly at mountroot> prompt, enter ufs:ufs/eMMCroota
  • This will scan eMMC partitions and will then export each partition as a separate disk. These can be viewed by entering ? in mountprompt.

Actually, with latest changes in SDIO stack, naming is a bit altered. Now the partitions are named as eMMCroot, sdda0s2a etc while by default it should be mmcsd0s2a. It was just a small tweak in fstab which solved this issue. But my fstab solution isn’t universally true, it will vary with the development board too. So, it’s always better to scan for available partitions by typing ‘?’ in mountprompt and then enter the root partition to boot from.

  • Here’s the log:
ARM Debug Architecture not supported                                            
KDB: debugger backends: ddb                                                     
KDB: current backend: ddb                                                       
Copyright (c) 1992-2017 The FreeBSD Project.                                    
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994        
        The Regents of the University of California. All rights reserved.       
FreeBSD is a registered trademark of The FreeBSD Foundation.                    
FreeBSD 12.0-CURRENT #0 642b174dadd(HEAD)-dirty: Mon Jul  2 09:53:42 IST 2018   
    udit2@root:/BBB_old/obj/arm.armv6/BBB/sys/GENERIC-MMCCAM arm                
FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.)
WARNING: WITNESS option enabled, expect reduced performance.                    
VT: init without driver.                                                        
CPU: ARM Cortex-A8 r3p2 (ECO: 0x00000000)                                       
CPU Features:                                                                   
  Thumb2, Security, VMSAv7                                                      
Optional instructions:                                                          
  UMULL, SMULL, SIMD(ext)                                                       
LoUU:2 LoC:3 LoUIS:1                                                            
Cache level 1:                                                                  
 32KB/64B 4-way data cache WT WB Read-Alloc                                     
 32KB/64B 4-way instruction cache Read-Alloc                                    
Cache level 2:                                                                  
 256KB/64B 8-way unified cache WT WB Read-Alloc Write-Alloc                     
real memory  = 536870912 (512 MB)                                               
avail memory = 507879424 (484 MB)                                               
Texas Instruments AM335x Processor, Revision ES2.1                              
random: entropy device external interface                                       
kbd0 at kbdmux0                                                                 
ofwbus0: <Open Firmware Device Tree>                                            
simplebus0: <Flattened device tree simple bus> on ofwbus0                       
simplebus1: <Flattened device tree simple bus> on simplebus0                    
simplebus2: <Flattened device tree simple bus> mem 0x210000-0x211fff on simpleb1
ti_scm0: <TI Control Module> mem 0-0x7ff on simplebus2                          
regfix0: <Fixed Regulator> on ofwbus0                                           
clk_fixed0: <Fixed clock> on ofwbus0                                            
ti_aintc0: <TI AINTC Interrupt Controller> mem 0x48200000-0x48200fff on simpleb0
ti_aintc0: Revision 5.0                                                         
cpulist0: <Open Firmware CPU Group> on ofwbus0                                  
cpu0: <Open Firmware CPU> on cpulist0                                           
pmu0: <Performance Monitoring Unit> irq 0 on ofwbus0                            
am335x_prcm0: <AM335x Power and Clock Management> mem 0x200000-0x203fff on simp1
am335x_prcm0: Clocks: System 24.0 MHz, CPU 1000 MHz                             
ti_pinmux0: <TI Pinmux Module> mem 0x800-0xa37 on simplebus2                    
am335x_scm0: <AM335x Control Module Extension> on ti_scm0                       
gpio0: <TI AM335x General Purpose I/O (GPIO)> mem 0x44e07000-0x44e07fff irq 7 o0
gpiobus0: <OFW GPIO bus> on gpio0                                               
gpioc0: <GPIO controller> on gpio0                                              
gpio1: <TI AM335x General Purpose I/O (GPIO)> mem 0x4804c000-0x4804cfff irq 8 o0
gpiobus1: <OFW GPIO bus> on gpio1                                               
gpioc1: <GPIO controller> on gpio1                                              
gpio2: <TI AM335x General Purpose I/O (GPIO)> mem 0x481ac000-0x481acfff irq 9 o0
gpiobus2: <OFW GPIO bus> on gpio2                                               
gpioc2: <GPIO controller> on gpio2                                              
gpio3: <TI AM335x General Purpose I/O (GPIO)> mem 0x481ae000-0x481aefff irq 10 0
gpiobus3: <OFW GPIO bus> on gpio3                                               
gpioc3: <GPIO controller> on gpio3                                              
��uart0: <TI UART (16550 compatible)> mem 0x44e09000-0x44e0afff irq 11 on simpl0
uart0: console (115384,n,8,1)                                                   
iichb0: <TI I2C Controller> mem 0x44e0b000-0x44e0bfff irq 17 on simplebus0      
iichb0: I2C revision 4.0 FIFO size: 32 bytes                                    
iicbus0: <OFW I2C bus> on iichb0                                                
iic0: <I2C generic I/O> on iicbus0                                              
am335x_pmic0: <TI TPS65217 Power Management IC> at addr 0x48 irq 54 on iicbus0  
iicbus0: <unknown card> at addr 0xa0                                            
tda0 at addr 0xe0 on iicbus0                                                    
iichb1: <TI I2C Controller> mem 0x4819c000-0x4819cfff irq 19 on simplebus0      
iichb1: I2C revision 4.0 FIFO size: 32 bytes                                    
iicbus1: <OFW I2C bus> on iichb1                                                
iic1: <I2C generic I/O> on iicbus1                                              
iicbus1: <unknown card> at addr 0xa8                                            
iicbus1: <unknown card> at addr 0xaa                                            
iicbus1: <unknown card> at addr 0xac                                            
iicbus1: <unknown card> at addr 0xae                                            
sdhci_ti0: <TI MMCHS (SDHCI 2.0)> mem 0x48060000-0x48060fff irq 20 on simplebus0
sdhci_ti0: Custom-disabling 8-bit bus                                           
sdhci_ti1: <TI MMCHS (SDHCI 2.0)> mem 0x481d8000-0x481d8fff irq 21 on simplebus0
sdhci_ti1: Custom-disabling 8-bit bus                                           
mmc_alloc_device()                                                              
ti_wdt0: <TI Watchdog Timer> mem 0x44e35000-0x44e35fff irq 23 on simplebus0     
ti_mbox0: <TI System Mailbox> mem 0x480c8000-0x480c81ff irq 26 on simplebus0    
ti_mbox0: revision 4.0                                                          
am335x_dmtimer0: <AM335x DMTimer2> mem 0x48040000-0x480403ff irq 28 on simplebu0
Event timer "DMTimer2" frequency 24000000 Hz quality 500                        
am335x_dmtimer1: <AM335x DMTimer3> mem 0x48042000-0x480423ff irq 29 on simplebu0
Timecounter "DMTimer3" frequency 24000000 Hz quality 500                        
am335x_rtc0: <AM335x RTC (power management mode)> mem 0x44e3e000-0x44e3efff irq0
am335x_rtc0: AM335X RTC v1.0.6                                                  
usbss0: <TI AM33xx integrated USB OTG controller> mem 0x47400000-0x47400fff on 0
usbss0: TI AM335X USBSS v0.0.13                                                 
musbotg0: <TI AM33xx integrated USB OTG controller> mem 0x47401400-0x474017ff,00
usbus0: Dynamic FIFO sizing detected, assuming 16Kbytes of FIFO RAM             
usbus0 on musbotg0                                                              
musbotg1: <TI AM33xx integrated USB OTG controller> mem 0x47401c00-0x47401fff,00
usbus1: Dynamic FIFO sizing detected, assuming 16Kbytes of FIFO RAM             
usbus1 on musbotg1                                                              
cpswss0: <3-port Switch Ethernet Subsystem> mem 0x4a100000-0x4a1007ff,0x4a101200
cpswss0: CPSW SS Version 1.12 (0)                                               
cpswss0: Initial queue size TX=128 RX=384                                       
cpsw0: <Ethernet Switch Port> on cpswss0                                        
miibus0: <MII bus> on cpsw0                                                     
smscphy0: <SMC LAN8710A 10/100 interface> PHY 0 on miibus0                      
smscphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto                 
cpsw0: Ethernet address: 68:9e:19:6f:38:cd                                      
fb0: <AM335x LCD controller> mem 0x4830e000-0x4830efff irq 43 on simplebus0     
ti_adc0: <TI ADC controller> mem 0x44e0d000-0x44e0dfff irq 44 disabled on simpl0
ti_adc0: scheme: 0x1 func: 0x730 rtl: 0 rev: 0.1 custom rev: 0                  
gpioled0: <GPIO LEDs> on ofwbus0                                                
cryptosoft0: <software crypto>                                                  
Timecounters tick every 1.000 msec                                              
mmc_dev_async(async_code=0x20, path_id=0, target_id=ffffffff, lun_id=ffffffff   
mmc_dev_async(async_code=0x20, path_id=1, target_id=0, lun_id=0                 
Got AC_PATH_REGISTERED -- whatever...                                           
mmc_dev_async(async_code=0x20, path_id=1, target_id=ffffffff, lun_id=ffffffff   
usbus0: 480Mbps High Speed USB v2.0                                             
usbus1: 480Mbps High Speed USB v2.0                                             
(noperiph:sdhci_slot0:0:-1:ffffffff): XPT_SCAN_{BUS,TGT,LUN}                    
(noperiph:sdhci_slot1:0:-1:ffffffff): XPT_SCAN_{BUS,TGT,LUN}                    
(noperiph:sdhci_slot1:0:0:0): XPT_SCAN_{BUS,TGT,LUN}                            
(noperiph:sdhci_slot1:0:0:0):  Set up the mmcprobe device...                    
(mmcprobe0:sdhci_slot1:0:0:0): Periph created                                   
(mmcprobe0:sdhci_slot1:0:0:0): Probe started                                    
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_INVALID to PROBE_RESET               
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_RESET                           
sdhci_ti1-slot0: Clock => 0                                                     
sdhci_ti1-slot0: VDD => 18                                                      
sdhci_ti1-slot0: CS => 0                                                        
sdhci_ti1-slot0: Bus width => 0                                                 
sdhci_ti1-slot0: Power mode => 1                                                
sdhci_ti1-slot0: Bus mode => 1                                                  
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=1, clk=0, bus_width=0, timing0
sdhci_ti1: Custom-disabling 8-bit bus                                           
am335x_pmic0: TPS65217C ver 1.2 powered by USB                                  
tda0: TDA19988                                                                  
sdhci_ti1-slot0: Clock => 375000                                                
sdhci_ti1-slot0: Power mode => 2                                                
sdhci_ti1-slot0: Timing => 0                                                    
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=2, clk=375000, bus_width=0, t0
sdhci_ti1: Custom-disabling 8-bit bus                                           
tda0: failed to read EDID                                                       
sdhci_ti1-slot0: CS => 1                                                        
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=2, clk=375000, bus_width=0, t0
uhub0: 1 port with 1 removable, self powered                                    
sdhci_ti1: uhub1: 1 port with 1 removable, self powered                         
Custom-disabling 8-bit bus                                                      
(mmcprobe0:sdhci_slot1:0:0:0): Send first XPT_MMC_IO                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
Starting completion of PROBE_RESET                                              
(mmcprobe0:sdhci_slot1:0:0:0): done with PROBE_RESET                            
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_RESET to PROBE_SEND_IF_COND          
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_SEND_IF_COND                    
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): IF_COND: error 1, pattern 00000000               
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_SEND_IF_COND to PROBE_SDIO_RESET     
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_SDIO_RESET                      
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): SDIO_RESET: error 1, CCCR CTL register: 00000000 
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_SDIO_RESET to PROBE_SDIO_INIT        
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_SDIO_INIT                       
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): SDIO_INIT: error 1, 00000000 00000000 00000000 00
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_SDIO_INIT to PROBE_SEND_APP_OP_COND  
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): APP_OP_COND: error 1, resp 00000000              
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_SEND_APP_OP_COND to PROBE_MMC_INIT   
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_MMC_INIT                        
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
ugen0.2: <FreeBSD foundation USB Memory Stick> at usbus0                        
(mmcprobe0:sdhci_slot1:0:0:0): MMC card, OCR 00ff8080                           
(mmcprobe0:sdhci_slot1:0:0:0): -> sending OCR to card                           
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_MMC_INIT                        
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): MMC card, OCR 00ff8080                           
(mmcprobe0:sdhci_slot1:0:0:0): Card is still powering up                        
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_MMC_INIT                        
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): MMC card, OCR c0ff8080                           
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_MMC_INIT to PROBE_GET_CID            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): CID fe014e4d4d43303447428900535f6129             
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_GET_CID to PROBE_MMC_SET_RELATIVE_ADR
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): ugen0.2: <FreeBSD foundation USB Memory Stick> a)
ugen0.2: <FreeBSD foundation USB Memory Stick> at usbus0                        
Probe PROBE_MMC_SET_RELATIVE_ADDR to PROBE_GET_CSD                              
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): CSD d04f01320f5913ffffffffe78a40008f             
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_GET_CSD to PROBE_SELECT_CARD         
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
mmc_probedone: remaining freezecnt 1                                            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_done                                    
(mmcprobe0:sdhci_slot1:0:0:0): Probe PROBE_SELECT_CARD to PROBE_DONE            
(mmcprobe0:sdhci_slot1:0:0:0): mmcprobe_start                                   
(mmcprobe0:sdhci_slot1:0:0:0): Start with PROBE_DONE                            
sdhci_ti1-slot0: Bus mode => 2                                                  
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=2, clk=375000, bus_width=0, t0
sdhci_ti1: Custom-disabling 8-bit bus                                           
mmc_probedone: remaining freezecnt 0                                            
(mmcprobe0:sdhci_slot1:0:0:0): Periph invalidated                               
(mmcprobe0:sdhci_slot1:0:0:0): Periph destroyed                                 
(noperiph:sdhci_slot1:0:0:0): xpt_async(AC_FOUND_DEVICE)                        
mmc_dev_async(async_code=0x80, path_id=1, target_id=0, lun_id=0                 
Got AC_FOUND_DEVICE -- whatever...                                              
(pass0:sdhci_slot1:0:0:0): Periph created                                       
(sdda0:sdhci_slot1:0:0:0): Periph created                                       
WARNING: WITNESS option enabled, expect reduced performance.                    
                                                                                
Loader variables:                                                               
                                                                                
Manual root filesystem specification:                                           
  <fstype>:<device> [options]                                                   
      Mount <device> using filesystem <fstype>                                  
      and with the specified (optional) option list.                            
                                                                                
    eg. ufs:/dev/da0s1a                                                         
        zfs:tank                                                                
        cd9660:/dev/cd0 ro                                                      
          (which is equivalent to: mount -t cd9660 -o ro /dev/cd0 /)            
                                                                                
  ?               List valid disk boot devices                                  
  .               Yield 1 second (for background tasks)                         
  <empty line>    Abort manual input                                            
                                                                                
mountroot> ufs:ufs/eMMCroota                                                    
Trying to mount root from ufs:ufs/eMMCroota []...                                                      
mountroot: waiting for device ufs/eMMCroota...                                                         
(sdda0:sdhci_slot1:0:0:0): Capacity: 3925868544, sectors: 7667712               
(sdda0:sdhci_slot1:0:0:0): Set SD freq to 52 MHz (min out of host f=96 MHz and )
sdhci_ti1-slot0: Timing => 1                                                    
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=2, clk=375000, bus_width=0, t1
sdhci_ti1: Custom-disabling 8-bit bus                                           
sdhci_ti1-slot0: Clock => 48000000                                              
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=2, clk=48000000, bus_width=0,1
sdhci_ti1: Custom-disabling 8-bit bus                                           
(sdda0:sdhci_slot1:0:0:0): Set bus width to 8-bit (min of host 8-bit and card 8)
sdhci_ti1-slot0: Bus width => 3                                                 
sdhci_ti1-slot0: sdhci_cam_update_ios: power_mode=2, clk=48000000, bus_width=3,1
sdhci_ti1: Custom-enabling 8-bit bus                                            
(sdda0:sdhci_slot1:0:0:0): Partition type 'default', size 3925868544            
uma_zalloc_arg: zone "128" with the following non-sleepable locks held:         
exclusive sleep mutex CAM device lock (CAM device lock) r = 0 (0xc2df6c64) lock3
stack backtrace:                                                                
(sdda0:sdhci_slot1:0:0:0): Partition type 'boot0', size 1048576                 
uma_zalloc_arg: zone "128" with the following non-sleepable locks held:         
exclusive sleep mutex CAM device lock (CAM device lock) r = 0 (0xc2df6c64) lock7
stack backtrace:                                                                
(sdda0:sdhci_slot1:0:0:0): Partition type 'boot1', size 1048576                 
uma_zalloc_arg: zone "128" with the following non-sleepable locks held:         
exclusive sleep mutex CAM device lock (CAM device lock) r = 0 (0xc2df6c64) lock7
stack backtrace:                                                                
(sdda0:sdhci_slot1:0:0:0): Partition type 'RPMB', size 131072                   
uma_zalloc_arg: zone "128" with the following non-sleepable locks held:         
exclusive sleep mutex CAM device lock (CAM device lock) r = 0 (0xc2df6c64) lock7
stack backtrace:                                                                
(sdda0:sdhci_slot1:0:0:0): Don't know what to do with RPMB partitions yet       
sdda0 at sdhci_slot1 bus 0 scbus1 target 0 lun 0                                
sdda0: Relative addr: 00000002                                                  
Card features: <MMC Memory High-Capacity >                                      
Card memory OCR: 00ff8080                                                       
sdda0: Serial Number 8900535                                                    
(sdda0:sdhci_slot1:0:0:0): mmc_announce_periph: called                          
XPT info: CLK 2DC6C00, ...                                                      
sdda0: MMCHC MMC04G 4.2 SN 8900535F MFG 06/1998 by 254 0x004e                   
(sdda0:sdhci_slot1:0:0:0): Partition  0 -> 1                                    
(sdda0:sdhci_slot1:0:0:0): Partition  1 -> 2                                    
(sdda0:sdhci_slot1:0:0:0): Partition  2 -> 0                                    
WARNING: /: TRIM flag on fs but disk does not support TRIM                      
warning: no time-of-day clock registered, system time will not be set accurately
Setting hostuuid: 102abfaa-5d2a-11e8-b2af-689e196f38cd.                         
Setting hostid: 0xa7ba3792.                                                     
eval: cannot open /etc/fstab: No such file or directory                         
No suitable dump device was found.                                              
eval: cannot open /etc/fstab: No such file or directory                         
fstab: /etc/fstab:0: No such file or directory                                  
Warning! No /etc/fstab: skipping disk checks.                                   
fstab: /etc/fstab:0: No such file or directory                                  
mount: ufs/eMMCroota: No such file or directory                                 
Mounting root filesystem rw failed, startup aborted                             
ERROR: ABORTING BOOT (sending SIGTERM to parent)!                               
2018-07-02T04:37:56.896833+00:00  init 1 - - /bin/sh on /etc/rc terminated abnoe
Enter full pathname of shell or RETURN for /bin/sh:
# cd /dev 
# ls

 

Tagged , ,

4 thoughts on “Backporting MMCCAM/SDIO framework to FreeBSD head 642b174dadd

  1. Nice work Udit! Thanks for the graphic too. How does the rtems team track patches to libbsd?

    I’m curious if there will be any differences in benchmarks from your earlier performance tests on Illya’s branch. Did you do any bench marking on FreeBSD head? Did you ever work out a standard deviation from your results?

    1. True, It would be fun to see if there is any difference in benchmarking results after latest partition update of the stack. I’ll carry forward with the tests right after the stack gets imported to RTEMS i.e in phase 3. I also have to compare the results of IOZONE with FIO, and yes i’ll work out standard deviation too. Thanks for feedback!

Leave a Reply to Russell Haley Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.