PfSense 2.2.2 on a soekris net4801

  • I have been working on getting pfSense 2.2.2 (i386 nanobsd) running on a surplus soekris net4801.  I was going to post a question but, I figured it out while waiting for the forums here to be fixed.  I thought I would share this, in case it helps anyone else.

    The first issue I ran into was with terminal speeds.  Most stuff talking about the net4801 suggests using 9600 baud for the serial console.  However, newer releases of pfSense use 115200.  That gets set in the net4801 BIOS.

    POST: 012345689bcefghipsajklnopqr,,,tvwxy
    comBIOS ver. 1.33  20080103  Copyright (C) 2000-2007 Soekris Engineering.
    comBIOS Monitor.   Press ? for help.
    > show
    ConSpeed = 115200
    ConLock = Enabled
    ConMute = Disabled
    BIOSentry = Enabled
    PCIROMS = Enabled
    PXEBoot = Disabled
    FLASH = Primary
    BootDelay = 5
    FastBoot = Disabled
    BootPartition = Disabled
    BootDrive = 80 81 F0 FF
    ShowPCI = Enabled
    Reset = Hard
    CpuSpeed = Default

    After getting that situated, I ran into a problem during boot where it would stall:

    random: unblocking device.
    (ada0:ata0:0:0:0): READ_DMA. ACB: c8 00 1e fc 3d 40 00 00 00 00 01 00
    (ada0:ata0:0:0:0): CAM status: Command timeout
    (ada0:ata0:0:0:0): Retrying command
    (ada0:ata0:0:0:0): READ_DMA. ACB: c8 00 1e fc 3d 40 00 00 00 00 01 00
    (ada0:ata0:0:0:0): CAM status: Command timeout
    (ada0:ata0:0:0:0): Error 5, Retries exhausted

    I got past this by disabling DMA.  After the kernel loads, you can interrupt the boot sequence and, use a set command to disable DMA for the current boot:

    Hit [Enter] to boot immediately, or any other key for command prompt.
    Booting [/boot/kernel/kernel] in 3 seconds...
    Type '?' for a list of commands, 'help' for more detailed help.
    OK set hw.ata.ata_dma=0
    OK boot

    Of course, it would be super inconvenient to have to do this via serial console on every boot.  So, it needs to be added to /boot/loader.conf.

    On the way there, one can configure the network interfaces.  They are, from right (just after the serial port) to left:

    sis0: labeled eth0 on the case
    sis1: labeled eth1 on the case
    sis2: labeled eth2 on the case

    Once you get to the pfSense menu, choose option 8 to get a shell.  /boot is mounted read-only.  So, we need to remount it:

    [2.2.2-RELEASE][root@pfSense.localdomain]/root: /etc/rc.conf_mount_rw

    Then, add the appropriate line to /boot/loader.conf:

    [2.2.2-RELEASE][root@pfSense.localdomain]/root: echo 'hw.ata.ata_dma="0"' >>/boot/loader.conf
    [2.2.2-RELEASE][root@pfSense.localdomain]/root: cat /boot/loader.conf

    Remount the file system read-only when you are done and, exit back to the menu:

    [2.2.2-RELEASE][root@pfSense.localdomain]/root: /etc/rc.conf_mount_ro
    [2.2.2-RELEASE][root@pfSense.localdomain]/root: exit

    Anything else I should be doing with this?  Reply and let me know!

  • Netgate Administrator

    Hmm, I'm surprised that worked because in 2.2 the method for disabling it has changed. See:
    You may want to use that instead as that's the correct method in FreeBSD 10+


  • Interesting. The "pfSense 2.2 and later" settings do not work for me on the soekris net4801 with pfSense 2.2.2. After entering "set" at the boot loader prompt, it locks up just as it did originally.

  • Netgate Administrator

    You may not need the write cache disabling. Does the dma setting work by itself?


  • "hw.ata.ata_dma=0" works by itself. Is there some newer variant of that? I tried "" and several variants of that, to no avail.

  • Netgate Administrator

    Yes, just like it shows in that link. Instead of disabling DMA you set PIO mode:


    Which of course does disable DMA.


  • My apologies: I should have read more carefully. I just jumped down to the "Disable Write Caching" section. I think I have documentation fatigue today.

    Yes, hint.ata.0.mode=PIO4 works in place of hw.ata.ata_dma=0 and, it boots fine.

    Thank you.


Log in to reply