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 |
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 --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; }
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(-)