Hi Simon, On Fri, Nov 13, 2015 at 5:45 AM, Simon Glass <s...@chromium.org> wrote: > Currently we using switch() and access PCI configuration via several
using -> use > functions, one for each data size. Adjust the code to use generic functions, > where the data size is a parameter. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > common/cmd_pci.c | 49 +++++++++++++++---------------------------------- > 1 file changed, 15 insertions(+), 34 deletions(-) > > diff --git a/common/cmd_pci.c b/common/cmd_pci.c > index 53b0f42..306e734 100644 > --- a/common/cmd_pci.c > +++ b/common/cmd_pci.c > @@ -330,7 +330,8 @@ static pci_dev_t get_pci_dev(char* name) > return PCI_BDF(bdfs[0], bdfs[1], bdfs[2]); > } > > -static int pci_cfg_display(pci_dev_t bdf, ulong addr, ulong size, ulong > length) > +static int pci_cfg_display(pci_dev_t bdf, ulong addr, enum pci_size_t size, > + ulong length) > { > #define DISP_LINE_LEN 16 > ulong i, nbytes, linebytes; > @@ -344,23 +345,13 @@ static int pci_cfg_display(pci_dev_t bdf, ulong addr, > ulong size, ulong length) > */ > nbytes = length * size; > do { > - uint val4; > - ushort val2; > - u_char val1; > - > printf("%08lx:", addr); > linebytes = (nbytes>DISP_LINE_LEN)?DISP_LINE_LEN:nbytes; > for (i=0; i<linebytes; i+= size) { > - if (size == 4) { > - pci_read_config_dword(bdf, addr, &val4); > - printf(" %08x", val4); > - } else if (size == 2) { > - pci_read_config_word(bdf, addr, &val2); > - printf(" %04x", val2); > - } else { > - pci_read_config_byte(bdf, addr, &val1); > - printf(" %02x", val1); > - } > + unsigned long val; > + > + val = pci_read_config(bdf, addr, size); > + printf(" %*lx", pci_field_width(size), val); I think this should be "%.*x" > addr += size; > } > printf("\n"); > @@ -390,32 +381,20 @@ static int pci_cfg_write (pci_dev_t bdf, ulong addr, > ulong size, ulong value) > return 0; > } > > -static int > -pci_cfg_modify (pci_dev_t bdf, ulong addr, ulong size, ulong value, int > incrflag) > +static int pci_cfg_modify(pci_dev_t bdf, ulong addr, enum pci_size_t size, > + ulong value, int incrflag) > { > ulong i; > int nbytes; > - uint val4; > - ushort val2; > - u_char val1; > + ulong val; > > /* Print the address, followed by value. Then accept input for > * the next value. A non-converted value exits. > */ > do { > printf("%08lx:", addr); > - if (size == 4) { > - pci_read_config_dword(bdf, addr, &val4); > - printf(" %08x", val4); > - } > - else if (size == 2) { > - pci_read_config_word(bdf, addr, &val2); > - printf(" %04x", val2); > - } > - else { > - pci_read_config_byte(bdf, addr, &val1); > - printf(" %02x", val1); > - } > + val = pci_read_config(bdf, addr, size); > + printf(" %*lx", pci_field_width(size), val); "%.*x"? > > nbytes = cli_readline(" ? "); > if (nbytes == 0 || (nbytes == 1 && console_buffer[0] == '-')) > { > @@ -461,7 +440,8 @@ pci_cfg_modify (pci_dev_t bdf, ulong addr, ulong size, > ulong value, int incrflag > */ > static int do_pci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > { > - ulong addr = 0, value = 0, size = 0; > + ulong addr = 0, value = 0, cmd_size = 0; > + enum pci_size_t size; > int busnum = 0; > pci_dev_t bdf = 0; > char cmd = 's'; > @@ -476,7 +456,8 @@ static int do_pci(cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) > case 'm': /* modify */ > case 'w': /* write */ > /* Check for a size specification. */ > - size = cmd_get_data_size(argv[1], 4); > + cmd_size = cmd_get_data_size(argv[1], 4); > + size = (cmd_size == 4) ? PCI_SIZE_32 : size - 1; > if (argc > 3) > addr = simple_strtoul(argv[3], NULL, 16); > if (argc > 4) > -- Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot