Author: marius
Date: Mon May 10 18:56:40 2010
New Revision: 207874
URL: http://svn.freebsd.org/changeset/base/207874

Log:
  MFC: r207287
  
  On sparc64 obtain the initiator ID to be used for SPI HBAs from the
  Open Firmware device tree in order to match what the PROM built-in
  driver uses. This is especially important when netbooting Fujitsu
  Siemens PRIMEPOWER250 as in that case the built-in driver isn't used
  and the port facts PortSCSIID defaults to 0, conflicting with the
  disk at the same address.

Modified:
  stable/7/sys/dev/mpt/mpt.c
  stable/7/sys/dev/mpt/mpt.h
  stable/7/sys/dev/mpt/mpt_pci.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/dev/mpt/mpt.c
==============================================================================
--- stable/7/sys/dev/mpt/mpt.c  Mon May 10 18:56:36 2010        (r207873)
+++ stable/7/sys/dev/mpt/mpt.c  Mon May 10 18:56:40 2010        (r207874)
@@ -2659,6 +2659,8 @@ mpt_configure_ioc(struct mpt_softc *mpt,
                mpt->is_fc = 0;
                mpt->is_sas = 0;
                mpt->is_spi = 1;
+               if (mpt->mpt_ini_id == MPT_INI_ID_NONE)
+                       mpt->mpt_ini_id = pfp->PortSCSIID;
        } else if (pfp->PortType == MPI_PORTFACTS_PORTTYPE_ISCSI) {
                mpt_prt(mpt, "iSCSI not supported yet\n");
                return (ENXIO);

Modified: stable/7/sys/dev/mpt/mpt.h
==============================================================================
--- stable/7/sys/dev/mpt/mpt.h  Mon May 10 18:56:36 2010        (r207873)
+++ stable/7/sys/dev/mpt/mpt.h  Mon May 10 18:56:40 2010        (r207874)
@@ -130,6 +130,11 @@
 #include <machine/clock.h>
 #endif
 
+#ifdef __sparc64__
+#include <dev/ofw/openfirm.h>
+#include <machine/ofw_machdep.h>
+#endif
+
 #include <sys/rman.h>
 
 #if __FreeBSD_version < 500000  
@@ -172,6 +177,8 @@
 #define        MPT_ROLE_BOTH           3
 #define        MPT_ROLE_DEFAULT        MPT_ROLE_INITIATOR
 
+#define        MPT_INI_ID_NONE         -1
+
 /**************************** Forward Declarations 
****************************/
 struct mpt_softc;
 struct mpt_personality;
@@ -644,7 +651,6 @@ struct mpt_softc {
         * Port Facts
         */
        MSG_PORT_FACTS_REPLY *  port_facts;
-#define        mpt_ini_id      port_facts[0].PortSCSIID
 #define        mpt_max_tgtcmds port_facts[0].MaxPostedCmdBuffers
 
        /*
@@ -657,6 +663,7 @@ struct mpt_softc {
                        CONFIG_PAGE_SCSI_PORT_2         _port_page2;
                        CONFIG_PAGE_SCSI_DEVICE_0       _dev_page0[16];
                        CONFIG_PAGE_SCSI_DEVICE_1       _dev_page1[16];
+                       int                             _ini_id;
                        uint16_t                        _tag_enable;
                        uint16_t                        _disc_enable;
                } spi;
@@ -665,6 +672,7 @@ struct mpt_softc {
 #define        mpt_port_page2          cfg.spi._port_page2
 #define        mpt_dev_page0           cfg.spi._dev_page0
 #define        mpt_dev_page1           cfg.spi._dev_page1
+#define        mpt_ini_id              cfg.spi._ini_id
 #define        mpt_tag_enable          cfg.spi._tag_enable
 #define        mpt_disc_enable         cfg.spi._disc_enable
                struct mpi_fc_cfg {

Modified: stable/7/sys/dev/mpt/mpt_pci.c
==============================================================================
--- stable/7/sys/dev/mpt/mpt_pci.c      Mon May 10 18:56:36 2010        
(r207873)
+++ stable/7/sys/dev/mpt/mpt_pci.c      Mon May 10 18:56:40 2010        
(r207874)
@@ -460,6 +460,11 @@ mpt_pci_attach(device_t dev)
        mpt->raid_queue_depth = MPT_RAID_QUEUE_DEPTH_DEFAULT;
        mpt->verbose = MPT_PRT_NONE;
        mpt->role = MPT_ROLE_NONE;
+       mpt->mpt_ini_id = MPT_INI_ID_NONE;
+#ifdef __sparc64__
+       if (mpt->is_spi)
+               mpt->mpt_ini_id = OF_getscsinitid(dev);
+#endif
        mpt_set_options(mpt);
        if (mpt->verbose == MPT_PRT_NONE) {
                mpt->verbose = MPT_PRT_WARN;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to