diff mbox series

[3/7] pci: swap_case: Allow compilation on 32-bit machines

Message ID 20210207212707.3958570-4-sjg@chromium.org
State Changes Requested
Delegated to: Tom Rini
Headers show
Series Fix compiler warnings for 32-bit ARM | expand

Commit Message

Simon Glass Feb. 7, 2021, 9:27 p.m. UTC
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.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/misc/swap_case.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

Comments

Heinrich Schuchardt Feb. 7, 2021, 9:34 p.m. UTC | #1
On 2/7/21 10:27 PM, Simon Glass wrote:
> 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.

The commit title and message leaves it open if this is only to make
compilation work or if the code works correctly on 32-bit with this patch.

Best regards

Heinrich

>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>   drivers/misc/swap_case.c | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/misc/swap_case.c b/drivers/misc/swap_case.c
> index 3cbc8f37ec5..7093ad1cd4f 100644
> --- a/drivers/misc/swap_case.c
> +++ b/drivers/misc/swap_case.c
> @@ -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;
>   		}
>
diff mbox series

Patch

diff --git a/drivers/misc/swap_case.c b/drivers/misc/swap_case.c
index 3cbc8f37ec5..7093ad1cd4f 100644
--- a/drivers/misc/swap_case.c
+++ b/drivers/misc/swap_case.c
@@ -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;
 		}