]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
pci: swap_case: Allow compilation on 32-bit machines
authorSimon Glass <sjg@chromium.org>
Sun, 18 Jul 2021 20:14:23 +0000 (14:14 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 28 Jul 2021 23:30:22 +0000 (19:30 -0400)
At present this driver assumes that ulong is 64-bits long. On 32-bit
machines it is not. Use the 64-bit code only on 64-bit machines.

This makes things work correctly on 32-bit machines.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/misc/swap_case.c

index 3cbc8f37ec5025758240a5d87b39335b709f58fc..7093ad1cd4fc642e953a715cc0015ecff94f2456 100644 (file)
@@ -302,7 +302,6 @@ static int sandbox_swap_case_write_io(struct udevice *dev, unsigned int addr,
 }
 
 static int pci_ea_bar2_magic = PCI_EA_BAR2_MAGIC;
-static int pci_ea_bar4_magic = PCI_EA_BAR4_MAGIC;
 
 static int sandbox_swap_case_map_physmem(struct udevice *dev,
                phys_addr_t addr, unsigned long *lenp, void **ptrp)
@@ -332,12 +331,22 @@ static int sandbox_swap_case_map_physmem(struct udevice *dev,
                        *ptrp = &pci_ea_bar2_magic;
                        *lenp = PCI_CAP_EA_SIZE_LO;
                        break;
+#ifdef CONFIG_HOST_64BIT
+               /*
+                * This cannot be work on a 32-bit machine since *lenp is ulong
+                * which is 32-bits, but it needs to have a 64-bit value
+                * assigned
+                */
                case (phys_addr_t)((PCI_CAP_EA_BASE_HI4 << 32) |
-                                  PCI_CAP_EA_BASE_LO4):
+                                  PCI_CAP_EA_BASE_LO4): {
+                       static int pci_ea_bar4_magic = PCI_EA_BAR4_MAGIC;
+
                        *ptrp = &pci_ea_bar4_magic;
                        *lenp = (PCI_CAP_EA_SIZE_HI << 32) |
                                PCI_CAP_EA_SIZE_LO;
                        break;
+               }
+#endif
                default:
                        return -ENOENT;
                }