svn commit: r366047 - head/sys/powerpc/powernv

Brandon Bergren bdragon at FreeBSD.org
Wed Sep 23 01:37:01 UTC 2020


Author: bdragon
Date: Wed Sep 23 01:37:01 2020
New Revision: 366047
URL: https://svnweb.freebsd.org/changeset/base/366047

Log:
  [PowerPC64LE] Endian fixes for opal_pci.c.
  
  Since OPAL runs in big endian, any data being passed back and forth
  via memory instead of registers needs to be byteswapped.
  
  From my notes during development:
  
  "A good way to find candidates is to look for vtophys() in opal_call()
  parameters. The memory being passed will be written into in BE."
  
  Sponsored by:	Tag1 Consulting, Inc.

Modified:
  head/sys/powerpc/powernv/opal_pci.c

Modified: head/sys/powerpc/powernv/opal_pci.c
==============================================================================
--- head/sys/powerpc/powernv/opal_pci.c	Wed Sep 23 01:33:54 2020	(r366046)
+++ head/sys/powerpc/powernv/opal_pci.c	Wed Sep 23 01:37:01 2020	(r366047)
@@ -524,11 +524,12 @@ opalpci_read_config(device_t dev, u_int bus, u_int slo
 	case 2:
 		error = opal_call(OPAL_PCI_CONFIG_READ_HALF_WORD, sc->phb_id,
 		    config_addr, reg, vtophys(&half));
-		word = half;
+		word = be16toh(half);
 		break;
 	case 4:
 		error = opal_call(OPAL_PCI_CONFIG_READ_WORD, sc->phb_id,
 		    config_addr, reg, vtophys(&word));
+		word = be32toh(word);
 		break;
 	default:
 		error = OPAL_SUCCESS;
@@ -547,6 +548,7 @@ opalpci_read_config(device_t dev, u_int bus, u_int slo
 			opal_call(OPAL_PCI_EEH_FREEZE_STATUS, sc->phb_id,
 			    OPAL_PCI_DEFAULT_PE, vtophys(&eeh_state),
 			    vtophys(&err_type), NULL);
+			err_type = be16toh(err_type); /* XXX unused */
 			if (eeh_state != OPAL_EEH_STOPPED_NOT_FROZEN)
 				opal_call(OPAL_PCI_EEH_FREEZE_CLEAR,
 				    sc->phb_id, OPAL_PCI_DEFAULT_PE,


More information about the svn-src-head mailing list