Message ID | 740762794.2398392.1344948785196.JavaMail.root@advansee.com |
---|---|
State | Superseded |
Delegated to: | Stefano Babic |
Headers | show |
> Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> > Cc: Wolfgang Denk <wd@denx.de> > Cc: Stefano Babic <sbabic@denx.de> Adding missing board maintainers to Cc. > --- > .../arch/powerpc/cpu/mpc512x/Makefile | 1 - > .../arch/powerpc/cpu/mpc512x/iim.c => /dev/null | 394 > -------------------- > .../board/davedenx/aria/aria.c | 2 +- > .../board/esd/mecp5123/mecp5123.c | 2 +- > .../board/freescale/mpc5121ads/mpc5121ads.c | 2 +- > .../board/pdm360ng/pdm360ng.c | 2 +- > .../include/configs/aria.h | 2 +- > .../include/configs/mecp5123.h | 2 +- > .../include/configs/mpc5121ads.h | 2 +- > 9 files changed, 7 insertions(+), 402 deletions(-) > delete mode 100644 > u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > > diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile > u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile > index b53232f..4f4c9ec 100644 > --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile > +++ u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile > @@ -38,7 +38,6 @@ COBJS-y += serial.o > COBJS-y += speed.o > COBJS-$(CONFIG_FSL_DIU_FB) += diu.o > COBJS-$(CONFIG_CMD_IDE) += ide.o > -COBJS-$(CONFIG_IIM) += iim.o > COBJS-$(CONFIG_PCI) += pci.o > > # Stub implementations of cache management functions for USB > diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > deleted file mode 100644 > index abec8f6..0000000 > --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > +++ /dev/null > @@ -1,394 +0,0 @@ > -/* > - * Copyright 2008 Silicon Turnkey Express, Inc. > - * Martha Marx <mmarx@silicontkx.com> > - * > - * ADS5121 IIM (Fusebox) Interface > - * > - * See file CREDITS for list of people who contributed to this > - * project. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License as > - * published by the Free Software Foundation; either version 2 of > - * the License, or (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > - * MA 02111-1307 USA > - */ > - > -#include <common.h> > -#include <command.h> > -#include <asm/io.h> > - > -#ifdef CONFIG_CMD_FUSE > - > -DECLARE_GLOBAL_DATA_PTR; > - > -static char cur_bank = '1'; > - > -char *iim_err_msg(u32 err) > -{ > - static char *IIM_errs[] = { > - "Parity Error in cache", > - "Explicit Sense Cycle Error", > - "Write to Locked Register Error", > - "Read Protect Error", > - "Override Protect Error", > - "Write Protect Error"}; > - > - int i; > - > - if (!err) > - return ""; > - for (i = 1; i < 8; i++) > - if (err & (1 << i)) > - printf("IIM - %s\n", IIM_errs[i-1]); > - return ""; > -} > - > -int in_range(int n, int min, int max, char *err, char *usg) > -{ > - if (n > max || n < min) { > - printf(err); > - printf("Usage:\n%s\n", usg); > - return 0; > - } > - return 1; > -} > - > -int ads5121_fuse_read(int bank, int fstart, int num) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 *iim_fb, dummy; > - int f, ctr; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fb = (u32 *)&(iim->fbac0); > - else > - iim_fb = (u32 *)&(iim->fbac1); > -/* try a read to see if Read Protect is set */ > - dummy = in_be32(&iim_fb[0]); > - if (in_be32(&iim->err) & IIM_ERR_RPE) { > - printf("\tRead protect fuse is set\n"); > - out_be32(&iim->err, IIM_ERR_RPE); > - return 0; > - } > - printf("Reading Bank %d cache\n", bank); > - for (f = fstart, ctr = 0; num > 0; ctr++, num--, f++) { > - if (ctr % 4 == 0) > - printf("F%2d:", f); > - printf("\t%#04x", (u8)(iim_fb[f])); > - if (ctr % 4 == 3) > - printf("\n"); > - } > - if (ctr % 4 != 0) > - printf("\n"); > -} > - > -int ads5121_fuse_override(int bank, int f, u8 val) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 *iim_fb; > - u32 iim_stat; > - int i; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fb = (u32 *)&(iim->fbac0); > - else > - iim_fb = (u32 *)&(iim->fbac1); > -/* try a read to see if Read Protect is set */ > - iim_stat = in_be32(&iim_fb[0]); > - if (in_be32(&iim->err) & IIM_ERR_RPE) { > - printf("Read protect fuse is set on bank %d;" > - "Override protect may also be set\n", bank); > - printf("An attempt will be made to override\n"); > - out_be32(&iim->err, IIM_ERR_RPE); > - } > - if (iim_stat & IIM_FBAC_FBOP) { > - printf("Override protect fuse is set on bank %d\n", bank); > - return 1; > - } > - if (f > IIM_FMAX) /* reset the entire bank */ > - for (i = 0; i < IIM_FMAX + 1; i++) > - out_be32(&iim_fb[i], 0); > - else > - out_be32(&iim_fb[f], val); > - return 0; > -} > - > -int ads5121_fuse_prog(cmd_tbl_t *cmdtp, int bank, char > *fuseno_bitno) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - int f, i, bitno; > - u32 stat, err; > - > - f = simple_strtol(fuseno_bitno, NULL, 10); > - if (f == 0 && fuseno_bitno[0] != '0') > - f = -1; > - if (!in_range(f, 0, IIM_FMAX, > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > - return 1; > - bitno = -1; > - for (i = 0; i < 6; i++) { > - if (fuseno_bitno[i] == '_') { > - bitno = simple_strtol(&(fuseno_bitno[i+1]), NULL, 10); > - if (bitno == 0 && fuseno_bitno[i+1] != '0') > - bitno = -1; > - break; > - } > - } > - if (!in_range(bitno, 0, 7, "Bit number ranges from 0-7\n" > - "Example of <frow_bitno>: \"18_4\" sets bit 4 of row 18\n", > - cmdtp->usage)) > - return 1; > - out_be32(&iim->err, in_be32(&iim->err)); > - out_be32(&iim->prg_p, IIM_PRG_P_SET); > - out_be32(&iim->ua, IIM_SET_UA(bank, f)); > - out_be32(&iim->la, IIM_SET_LA(f, bitno)); > -#ifdef DEBUG > - printf("Programming disabled with DEBUG defined \n"); > - printf(""Set up to pro > - printf("iim.ua = %x; iim.la = %x\n", iim->ua, iim->la); > -#else > - out_be32(&iim->fctl, IIM_FCTL_PROG_PULSE | IIM_FCTL_PROG); > - do > - udelay(20); > - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); > - out_be32(&iim->prg_p, 0); > - err = in_be32(&iim->err); > - if (stat & IIM_STAT_PRGD) { > - if (!(err & (IIM_ERR_WPE | IIM_ERR_WPE))) { > - printf("Fuse is successfully set"); > - if (err) > - printf(" - however there are other errors"); > - printf("\n"); > - } > - iim->stat = 0; > - } > - if (err) { > - iim_err_msg(err); > - out_be32(&iim->err, in_be32(&iim->err)); > - } > -#endif > -} > - > -int ads5121_fuse_sense(int bank, int fstart, int num) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 iim_fbac; > - u32 stat, err, err_hold = 0; > - int f, ctr; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fbac = in_be32(&iim->fbac0); > - else > - iim_fbac = in_be32(&iim->fbac1); > - if (iim_fbac & IIM_FBAC_FBESP) { > - printf("\tSense Protect disallows this operation\n"); > - out_be32(&iim->err, IIM_FBAC_FBESP); > - return 1; > - } > - err = in_be32(&iim->err); > - if (err) { > - iim_err_msg(err); > - err_hold |= err; > - } > - if (err & IIM_ERR_RPE) > - printf("\tRead protect fuse is set; " > - "Sense Protect may be set but will be attempted\n"); > - if (err) > - out_be32(&iim->err, err); > - printf("Sensing fuse(s) on Bank %d\n", bank); > - for (f = fstart, ctr = 0; num > 0; ctr++, f++, num--) { > - out_be32(&iim->ua, IIM_SET_UA(bank, f)); > - out_be32(&iim->la, IIM_SET_LA(f, 0)); > - out_be32(&iim->fctl, IIM_FCTL_ESNS_N); > - do > - udelay(20); > - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); > - err = in_be32(&iim->err); > - if (err & IIM_ERR_SNSE) { > - iim_err_msg(err); > - out_be32(&iim->err, IIM_ERR_SNSE); > - return 1; > - } > - if (stat & IIM_STAT_SNSD) { > - out_be32(&iim->stat, 0); > - if (ctr % 4 == 0) > - printf("F%2d:", f); > - printf("\t%#04x", (u8)iim->sdat); > - if (ctr % 4 == 3) > - printf("\n"); > - } > - if (err) { > - err_hold |= err; > - out_be32(&iim->err, err); > - } > - } > - if (ctr % 4 != 0) > - printf("\n"); > - if (err_hold) > - iim_err_msg(err_hold); > - > - return 0; > -} > - > -int ads5121_fuse_stat(int bank) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 iim_fbac; > - u32 err; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fbac = in_be32(&iim->fbac0); > - else > - iim_fbac = in_be32(&iim->fbac1); > - err = in_be32(&iim->err); > - if (err) > - iim_err_msg(err); > - if (err & IIM_ERR_RPE || iim_fbac & IIM_FBAC_FBRP) { > - if (iim_fbac == 0) > - printf("Since protection settings can't be read - " > - "try sensing fuse row 0;\n"); > - return 0; > - } > - if (iim_fbac & IIM_PROTECTION) > - printf("Protection Fuses Bank %d = %#04x:\n", bank, iim_fbac); > - else if (!(err & IIM_ERR_RPE)) > - printf("No Protection fuses are set\n"); > - if (iim_fbac & IIM_FBAC_FBWP) > - printf("\tWrite Protect fuse is set\n"); > - if (iim_fbac & IIM_FBAC_FBOP) > - printf("\tOverride Protect fuse is set\n"); > - if (iim_fbac & IIM_FBAC_FBESP) > - printf("\tSense Protect Fuse is set\n"); > - out_be32(&iim->err, in_be32(&iim->err)); > - > - return 0; > -} > - > -int do_ads5121_fuse(cmd_tbl_t *cmdtp, int flag, int argc, char * > const argv[]) > -{ > - int frow, n, v, bank; > - > - if (cur_bank == '0') > - bank = 0; > - else > - bank = 1; > - > - switch (argc) { > - case 0: > - case 1: > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - case 2: > - if (strncmp(argv[1], "stat", 4) == 0) > - return ads5121_fuse_stat(bank); > - if (strncmp(argv[1], "read", 4) == 0) > - return ads5121_fuse_read(bank, 0, IIM_FMAX + 1); > - if (strncmp(argv[1], "sense", 5) == 0) > - return ads5121_fuse_sense(bank, 0, IIM_FMAX + 1); > - if (strncmp(argv[1], "ovride", 6) == 0) > - return ads5121_fuse_override(bank, IIM_FMAX + 1, 0); > - if (strncmp(argv[1], "bank", 4) == 0) { > - printf("Active Fuse Bank is %c\n", cur_bank); > - return 0; > - } > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - case 3: > - if (strncmp(argv[1], "bank", 4) == 0) { > - if (argv[2][0] == '0') > - cur_bank = '0'; > - else if (argv[2][0] == '1') > - cur_bank = '1'; > - else { > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - } > - > - printf("Setting Active Fuse Bank to %c\n", cur_bank); > - return 0; > - } > - if (strncmp(argv[1], "prog", 4) == 0) > - return ads5121_fuse_prog(cmdtp, bank, argv[2]); > - > - frow = (int)simple_strtol(argv[2], NULL, 10); > - if (frow == 0 && argv[2][0] != '0') > - frow = -1; > - if (!in_range(frow, 0, IIM_FMAX, > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > - return 1; > - if (strncmp(argv[1], "read", 4) == 0) > - return ads5121_fuse_read(bank, frow, 1); > - if (strncmp(argv[1], "ovride", 6) == 0) > - return ads5121_fuse_override(bank, frow, 0); > - if (strncmp(argv[1], "sense", 5) == 0) > - return ads5121_fuse_sense(bank, frow, 1); > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - case 4: > - frow = (int)simple_strtol(argv[2], NULL, 10); > - if (frow == 0 && argv[2][0] != '0') > - frow = -1; > - if (!in_range(frow, 0, IIM_FMAX, > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > - return 1; > - if (strncmp(argv[1], "read", 4) == 0) { > - n = (int)simple_strtol(argv[3], NULL, 10); > - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, > - "<frow>+<n> must be between 1-32\n\n", > - cmdtp->usage)) > - return 1; > - return ads5121_fuse_read(bank, frow, n); > - } > - if (strncmp(argv[1], "ovride", 6) == 0) { > - v = (int)simple_strtol(argv[3], NULL, 10); > - return ads5121_fuse_override(bank, frow, v); > - } > - if (strncmp(argv[1], "sense", 5) == 0) { > - n = (int)simple_strtol(argv[3], NULL, 10); > - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, > - "<frow>+<n> must be between 1-32\n\n", > - cmdtp->usage)) > - return 1; > - return ads5121_fuse_sense(bank, frow, n); > - } > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - default: /* at least 5 args */ > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - } > -} > - > -U_BOOT_CMD( > - fuse, CONFIG_SYS_MAXARGS, 0, do_ads5121_fuse, > - " - Read, Sense, Override or Program Fuses\n", > - "bank <n> - sets active Fuse Bank to 0 or 1\n" > - " no args shows current active bank\n" > - "fuse stat - print active fuse bank's protection status\n" > - "fuse read [<frow> [<n>]] - print <n> fuse rows starting at > <frow>\n" > - " no args to print entire bank's fuses\n" > - "fuse ovride [<frow> [<v>]]- override fuses at <frow> with <v>\n" > - " no <v> defaults to 0 for the row\n" > - " no args resets entire bank to 0\n" > - " NOTE - settings persist until hard reset\n" > - "fuse sense [<frow>] - senses current fuse at <frow>\n" > - " no args for entire bank\n" > - "fuse prog <frow_bit> - program fuse at row <frow>, bit <_bit>\n" > - " <frow> is 0-31, <bit> is 0-7; eg. 13_2 \n" > - " WARNING - this is permanent" > -); > -#endif /* CONFIG_CMD_FUSE */ > diff --git u-boot-4d3c95f.orig/board/davedenx/aria/aria.c > u-boot-4d3c95f/board/davedenx/aria/aria.c > index 31b079b..d2ffba4 100644 > --- u-boot-4d3c95f.orig/board/davedenx/aria/aria.c > +++ u-boot-4d3c95f/board/davedenx/aria/aria.c > @@ -92,7 +92,7 @@ int board_early_init_f(void) > */ > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c > u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c > index 748ad7c..804a022 100644 > --- u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c > +++ u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c > @@ -110,7 +110,7 @@ int board_early_init_f(void) > */ > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git > u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c > u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c > index 97eeab3..0d33680 100644 > --- u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c > +++ u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c > @@ -129,7 +129,7 @@ int board_early_init_f(void) > */ > out_be32 (&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32 (&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32 (&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c > u-boot-4d3c95f/board/pdm360ng/pdm360ng.c > index 2082ad4..dcff9c5 100644 > --- u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c > +++ u-boot-4d3c95f/board/pdm360ng/pdm360ng.c > @@ -94,7 +94,7 @@ int board_early_init_f(void) > */ > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/include/configs/aria.h > u-boot-4d3c95f/include/configs/aria.h > index b21b495..cb20641 100644 > --- u-boot-4d3c95f.orig/include/configs/aria.h > +++ u-boot-4d3c95f/include/configs/aria.h > @@ -378,7 +378,7 @@ > /* > * IIM - IC Identification Module > */ > -#undef CONFIG_IIM > +#undef CONFIG_FSL_IIM > > /* > * EEPROM configuration for Atmel AT24C32A-10TQ-2.7: > diff --git u-boot-4d3c95f.orig/include/configs/mecp5123.h > u-boot-4d3c95f/include/configs/mecp5123.h > index b41bda9..52a159a 100644 > --- u-boot-4d3c95f.orig/include/configs/mecp5123.h > +++ u-boot-4d3c95f/include/configs/mecp5123.h > @@ -250,7 +250,7 @@ > /* > * IIM - IC Identification Module > */ > -#undef CONFIG_IIM > +#undef CONFIG_FSL_IIM > > /* > * EEPROM configuration > diff --git u-boot-4d3c95f.orig/include/configs/mpc5121ads.h > u-boot-4d3c95f/include/configs/mpc5121ads.h > index 9d1327f..88dd9bb 100644 > --- u-boot-4d3c95f.orig/include/configs/mpc5121ads.h > +++ u-boot-4d3c95f/include/configs/mpc5121ads.h > @@ -346,7 +346,7 @@ > /* > * IIM - IC Identification Module > */ > -#undef CONFIG_IIM > +#undef CONFIG_FSL_IIM > > /* > * EEPROM configuration >
On 14/08/2012 14:53, Benoît Thébaudeau wrote: > Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> > Cc: Wolfgang Denk <wd@denx.de> > Cc: Stefano Babic <sbabic@denx.de> > --- > .../arch/powerpc/cpu/mpc512x/Makefile | 1 - > .../arch/powerpc/cpu/mpc512x/iim.c => /dev/null | 394 -------------------- > .../board/davedenx/aria/aria.c | 2 +- > .../board/esd/mecp5123/mecp5123.c | 2 +- > .../board/freescale/mpc5121ads/mpc5121ads.c | 2 +- > .../board/pdm360ng/pdm360ng.c | 2 +- > .../include/configs/aria.h | 2 +- > .../include/configs/mecp5123.h | 2 +- > .../include/configs/mpc5121ads.h | 2 +- > 9 files changed, 7 insertions(+), 402 deletions(-) > delete mode 100644 u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > > diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile > index b53232f..4f4c9ec 100644 > --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile > +++ u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile > @@ -38,7 +38,6 @@ COBJS-y += serial.o > COBJS-y += speed.o > COBJS-$(CONFIG_FSL_DIU_FB) += diu.o > COBJS-$(CONFIG_CMD_IDE) += ide.o > -COBJS-$(CONFIG_IIM) += iim.o > COBJS-$(CONFIG_PCI) += pci.o > > # Stub implementations of cache management functions for USB > diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > deleted file mode 100644 > index abec8f6..0000000 > --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > +++ /dev/null > @@ -1,394 +0,0 @@ > -/* > - * Copyright 2008 Silicon Turnkey Express, Inc. > - * Martha Marx <mmarx@silicontkx.com> > - * > - * ADS5121 IIM (Fusebox) Interface > - * > - * See file CREDITS for list of people who contributed to this > - * project. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License as > - * published by the Free Software Foundation; either version 2 of > - * the License, or (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > - * MA 02111-1307 USA > - */ > - > -#include <common.h> > -#include <command.h> > -#include <asm/io.h> > - > -#ifdef CONFIG_CMD_FUSE > - > -DECLARE_GLOBAL_DATA_PTR; > - > -static char cur_bank = '1'; > - > -char *iim_err_msg(u32 err) > -{ > - static char *IIM_errs[] = { > - "Parity Error in cache", > - "Explicit Sense Cycle Error", > - "Write to Locked Register Error", > - "Read Protect Error", > - "Override Protect Error", > - "Write Protect Error"}; > - > - int i; > - > - if (!err) > - return ""; > - for (i = 1; i < 8; i++) > - if (err & (1 << i)) > - printf("IIM - %s\n", IIM_errs[i-1]); > - return ""; > -} > - > -int in_range(int n, int min, int max, char *err, char *usg) > -{ > - if (n > max || n < min) { > - printf(err); > - printf("Usage:\n%s\n", usg); > - return 0; > - } > - return 1; > -} > - > -int ads5121_fuse_read(int bank, int fstart, int num) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 *iim_fb, dummy; > - int f, ctr; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fb = (u32 *)&(iim->fbac0); > - else > - iim_fb = (u32 *)&(iim->fbac1); > -/* try a read to see if Read Protect is set */ > - dummy = in_be32(&iim_fb[0]); > - if (in_be32(&iim->err) & IIM_ERR_RPE) { > - printf("\tRead protect fuse is set\n"); > - out_be32(&iim->err, IIM_ERR_RPE); > - return 0; > - } > - printf("Reading Bank %d cache\n", bank); > - for (f = fstart, ctr = 0; num > 0; ctr++, num--, f++) { > - if (ctr % 4 == 0) > - printf("F%2d:", f); > - printf("\t%#04x", (u8)(iim_fb[f])); > - if (ctr % 4 == 3) > - printf("\n"); > - } > - if (ctr % 4 != 0) > - printf("\n"); > -} > - > -int ads5121_fuse_override(int bank, int f, u8 val) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 *iim_fb; > - u32 iim_stat; > - int i; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fb = (u32 *)&(iim->fbac0); > - else > - iim_fb = (u32 *)&(iim->fbac1); > -/* try a read to see if Read Protect is set */ > - iim_stat = in_be32(&iim_fb[0]); > - if (in_be32(&iim->err) & IIM_ERR_RPE) { > - printf("Read protect fuse is set on bank %d;" > - "Override protect may also be set\n", bank); > - printf("An attempt will be made to override\n"); > - out_be32(&iim->err, IIM_ERR_RPE); > - } > - if (iim_stat & IIM_FBAC_FBOP) { > - printf("Override protect fuse is set on bank %d\n", bank); > - return 1; > - } > - if (f > IIM_FMAX) /* reset the entire bank */ > - for (i = 0; i < IIM_FMAX + 1; i++) > - out_be32(&iim_fb[i], 0); > - else > - out_be32(&iim_fb[f], val); > - return 0; > -} > - > -int ads5121_fuse_prog(cmd_tbl_t *cmdtp, int bank, char *fuseno_bitno) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - int f, i, bitno; > - u32 stat, err; > - > - f = simple_strtol(fuseno_bitno, NULL, 10); > - if (f == 0 && fuseno_bitno[0] != '0') > - f = -1; > - if (!in_range(f, 0, IIM_FMAX, > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > - return 1; > - bitno = -1; > - for (i = 0; i < 6; i++) { > - if (fuseno_bitno[i] == '_') { > - bitno = simple_strtol(&(fuseno_bitno[i+1]), NULL, 10); > - if (bitno == 0 && fuseno_bitno[i+1] != '0') > - bitno = -1; > - break; > - } > - } > - if (!in_range(bitno, 0, 7, "Bit number ranges from 0-7\n" > - "Example of <frow_bitno>: \"18_4\" sets bit 4 of row 18\n", > - cmdtp->usage)) > - return 1; > - out_be32(&iim->err, in_be32(&iim->err)); > - out_be32(&iim->prg_p, IIM_PRG_P_SET); > - out_be32(&iim->ua, IIM_SET_UA(bank, f)); > - out_be32(&iim->la, IIM_SET_LA(f, bitno)); > -#ifdef DEBUG > - printf("Programming disabled with DEBUG defined \n"); > - printf(""Set up to pro > - printf("iim.ua = %x; iim.la = %x\n", iim->ua, iim->la); > -#else > - out_be32(&iim->fctl, IIM_FCTL_PROG_PULSE | IIM_FCTL_PROG); > - do > - udelay(20); > - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); > - out_be32(&iim->prg_p, 0); > - err = in_be32(&iim->err); > - if (stat & IIM_STAT_PRGD) { > - if (!(err & (IIM_ERR_WPE | IIM_ERR_WPE))) { > - printf("Fuse is successfully set"); > - if (err) > - printf(" - however there are other errors"); > - printf("\n"); > - } > - iim->stat = 0; > - } > - if (err) { > - iim_err_msg(err); > - out_be32(&iim->err, in_be32(&iim->err)); > - } > -#endif > -} > - > -int ads5121_fuse_sense(int bank, int fstart, int num) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 iim_fbac; > - u32 stat, err, err_hold = 0; > - int f, ctr; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fbac = in_be32(&iim->fbac0); > - else > - iim_fbac = in_be32(&iim->fbac1); > - if (iim_fbac & IIM_FBAC_FBESP) { > - printf("\tSense Protect disallows this operation\n"); > - out_be32(&iim->err, IIM_FBAC_FBESP); > - return 1; > - } > - err = in_be32(&iim->err); > - if (err) { > - iim_err_msg(err); > - err_hold |= err; > - } > - if (err & IIM_ERR_RPE) > - printf("\tRead protect fuse is set; " > - "Sense Protect may be set but will be attempted\n"); > - if (err) > - out_be32(&iim->err, err); > - printf("Sensing fuse(s) on Bank %d\n", bank); > - for (f = fstart, ctr = 0; num > 0; ctr++, f++, num--) { > - out_be32(&iim->ua, IIM_SET_UA(bank, f)); > - out_be32(&iim->la, IIM_SET_LA(f, 0)); > - out_be32(&iim->fctl, IIM_FCTL_ESNS_N); > - do > - udelay(20); > - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); > - err = in_be32(&iim->err); > - if (err & IIM_ERR_SNSE) { > - iim_err_msg(err); > - out_be32(&iim->err, IIM_ERR_SNSE); > - return 1; > - } > - if (stat & IIM_STAT_SNSD) { > - out_be32(&iim->stat, 0); > - if (ctr % 4 == 0) > - printf("F%2d:", f); > - printf("\t%#04x", (u8)iim->sdat); > - if (ctr % 4 == 3) > - printf("\n"); > - } > - if (err) { > - err_hold |= err; > - out_be32(&iim->err, err); > - } > - } > - if (ctr % 4 != 0) > - printf("\n"); > - if (err_hold) > - iim_err_msg(err_hold); > - > - return 0; > -} > - > -int ads5121_fuse_stat(int bank) > -{ > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > - u32 iim_fbac; > - u32 err; > - > - out_be32(&iim->err, in_be32(&iim->err)); > - if (bank == 0) > - iim_fbac = in_be32(&iim->fbac0); > - else > - iim_fbac = in_be32(&iim->fbac1); > - err = in_be32(&iim->err); > - if (err) > - iim_err_msg(err); > - if (err & IIM_ERR_RPE || iim_fbac & IIM_FBAC_FBRP) { > - if (iim_fbac == 0) > - printf("Since protection settings can't be read - " > - "try sensing fuse row 0;\n"); > - return 0; > - } > - if (iim_fbac & IIM_PROTECTION) > - printf("Protection Fuses Bank %d = %#04x:\n", bank, iim_fbac); > - else if (!(err & IIM_ERR_RPE)) > - printf("No Protection fuses are set\n"); > - if (iim_fbac & IIM_FBAC_FBWP) > - printf("\tWrite Protect fuse is set\n"); > - if (iim_fbac & IIM_FBAC_FBOP) > - printf("\tOverride Protect fuse is set\n"); > - if (iim_fbac & IIM_FBAC_FBESP) > - printf("\tSense Protect Fuse is set\n"); > - out_be32(&iim->err, in_be32(&iim->err)); > - > - return 0; > -} > - > -int do_ads5121_fuse(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > -{ > - int frow, n, v, bank; > - > - if (cur_bank == '0') > - bank = 0; > - else > - bank = 1; > - > - switch (argc) { > - case 0: > - case 1: > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - case 2: > - if (strncmp(argv[1], "stat", 4) == 0) > - return ads5121_fuse_stat(bank); > - if (strncmp(argv[1], "read", 4) == 0) > - return ads5121_fuse_read(bank, 0, IIM_FMAX + 1); > - if (strncmp(argv[1], "sense", 5) == 0) > - return ads5121_fuse_sense(bank, 0, IIM_FMAX + 1); > - if (strncmp(argv[1], "ovride", 6) == 0) > - return ads5121_fuse_override(bank, IIM_FMAX + 1, 0); > - if (strncmp(argv[1], "bank", 4) == 0) { > - printf("Active Fuse Bank is %c\n", cur_bank); > - return 0; > - } > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - case 3: > - if (strncmp(argv[1], "bank", 4) == 0) { > - if (argv[2][0] == '0') > - cur_bank = '0'; > - else if (argv[2][0] == '1') > - cur_bank = '1'; > - else { > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - } > - > - printf("Setting Active Fuse Bank to %c\n", cur_bank); > - return 0; > - } > - if (strncmp(argv[1], "prog", 4) == 0) > - return ads5121_fuse_prog(cmdtp, bank, argv[2]); > - > - frow = (int)simple_strtol(argv[2], NULL, 10); > - if (frow == 0 && argv[2][0] != '0') > - frow = -1; > - if (!in_range(frow, 0, IIM_FMAX, > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > - return 1; > - if (strncmp(argv[1], "read", 4) == 0) > - return ads5121_fuse_read(bank, frow, 1); > - if (strncmp(argv[1], "ovride", 6) == 0) > - return ads5121_fuse_override(bank, frow, 0); > - if (strncmp(argv[1], "sense", 5) == 0) > - return ads5121_fuse_sense(bank, frow, 1); > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - case 4: > - frow = (int)simple_strtol(argv[2], NULL, 10); > - if (frow == 0 && argv[2][0] != '0') > - frow = -1; > - if (!in_range(frow, 0, IIM_FMAX, > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > - return 1; > - if (strncmp(argv[1], "read", 4) == 0) { > - n = (int)simple_strtol(argv[3], NULL, 10); > - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, > - "<frow>+<n> must be between 1-32\n\n", > - cmdtp->usage)) > - return 1; > - return ads5121_fuse_read(bank, frow, n); > - } > - if (strncmp(argv[1], "ovride", 6) == 0) { > - v = (int)simple_strtol(argv[3], NULL, 10); > - return ads5121_fuse_override(bank, frow, v); > - } > - if (strncmp(argv[1], "sense", 5) == 0) { > - n = (int)simple_strtol(argv[3], NULL, 10); > - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, > - "<frow>+<n> must be between 1-32\n\n", > - cmdtp->usage)) > - return 1; > - return ads5121_fuse_sense(bank, frow, n); > - } > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - default: /* at least 5 args */ > - printf("Usage:\n%s\n", cmdtp->usage); > - return 1; > - } > -} > - > -U_BOOT_CMD( > - fuse, CONFIG_SYS_MAXARGS, 0, do_ads5121_fuse, > - " - Read, Sense, Override or Program Fuses\n", > - "bank <n> - sets active Fuse Bank to 0 or 1\n" > - " no args shows current active bank\n" > - "fuse stat - print active fuse bank's protection status\n" > - "fuse read [<frow> [<n>]] - print <n> fuse rows starting at <frow>\n" > - " no args to print entire bank's fuses\n" > - "fuse ovride [<frow> [<v>]]- override fuses at <frow> with <v>\n" > - " no <v> defaults to 0 for the row\n" > - " no args resets entire bank to 0\n" > - " NOTE - settings persist until hard reset\n" > - "fuse sense [<frow>] - senses current fuse at <frow>\n" > - " no args for entire bank\n" > - "fuse prog <frow_bit> - program fuse at row <frow>, bit <_bit>\n" > - " <frow> is 0-31, <bit> is 0-7; eg. 13_2 \n" > - " WARNING - this is permanent" > -); > -#endif /* CONFIG_CMD_FUSE */ > diff --git u-boot-4d3c95f.orig/board/davedenx/aria/aria.c u-boot-4d3c95f/board/davedenx/aria/aria.c > index 31b079b..d2ffba4 100644 > --- u-boot-4d3c95f.orig/board/davedenx/aria/aria.c > +++ u-boot-4d3c95f/board/davedenx/aria/aria.c > @@ -92,7 +92,7 @@ int board_early_init_f(void) > */ > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c > index 748ad7c..804a022 100644 > --- u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c > +++ u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c > @@ -110,7 +110,7 @@ int board_early_init_f(void) > */ > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c > index 97eeab3..0d33680 100644 > --- u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c > +++ u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c > @@ -129,7 +129,7 @@ int board_early_init_f(void) > */ > out_be32 (&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32 (&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32 (&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c u-boot-4d3c95f/board/pdm360ng/pdm360ng.c > index 2082ad4..dcff9c5 100644 > --- u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c > +++ u-boot-4d3c95f/board/pdm360ng/pdm360ng.c > @@ -94,7 +94,7 @@ int board_early_init_f(void) > */ > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > #endif > > diff --git u-boot-4d3c95f.orig/include/configs/aria.h u-boot-4d3c95f/include/configs/aria.h > index b21b495..cb20641 100644 > --- u-boot-4d3c95f.orig/include/configs/aria.h > +++ u-boot-4d3c95f/include/configs/aria.h > @@ -378,7 +378,7 @@ > /* > * IIM - IC Identification Module > */ > -#undef CONFIG_IIM > +#undef CONFIG_FSL_IIM > > /* > * EEPROM configuration for Atmel AT24C32A-10TQ-2.7: > diff --git u-boot-4d3c95f.orig/include/configs/mecp5123.h u-boot-4d3c95f/include/configs/mecp5123.h > index b41bda9..52a159a 100644 > --- u-boot-4d3c95f.orig/include/configs/mecp5123.h > +++ u-boot-4d3c95f/include/configs/mecp5123.h > @@ -250,7 +250,7 @@ > /* > * IIM - IC Identification Module > */ > -#undef CONFIG_IIM > +#undef CONFIG_FSL_IIM > > /* > * EEPROM configuration > diff --git u-boot-4d3c95f.orig/include/configs/mpc5121ads.h u-boot-4d3c95f/include/configs/mpc5121ads.h > index 9d1327f..88dd9bb 100644 > --- u-boot-4d3c95f.orig/include/configs/mpc5121ads.h > +++ u-boot-4d3c95f/include/configs/mpc5121ads.h > @@ -346,7 +346,7 @@ > /* > * IIM - IC Identification Module > */ > -#undef CONFIG_IIM > +#undef CONFIG_FSL_IIM > > /* > * EEPROM configuration > Generally agree if we can share code. This is MPC5121 specific, I will let Anatolji to add his comments. Best regards, Stefano
Dear Anatolij Gustschin, On Tuesday, August 21, 2012 10:15:00 AM, Stefano Babic wrote: > On 14/08/2012 14:53, Benoît Thébaudeau wrote: > > Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> > > Cc: Wolfgang Denk <wd@denx.de> > > Cc: Stefano Babic <sbabic@denx.de> > > --- > > .../arch/powerpc/cpu/mpc512x/Makefile | 1 - > > .../arch/powerpc/cpu/mpc512x/iim.c => /dev/null | 394 > > -------------------- > > .../board/davedenx/aria/aria.c | 2 +- > > .../board/esd/mecp5123/mecp5123.c | 2 +- > > .../board/freescale/mpc5121ads/mpc5121ads.c | 2 +- > > .../board/pdm360ng/pdm360ng.c | 2 +- > > .../include/configs/aria.h | 2 +- > > .../include/configs/mecp5123.h | 2 +- > > .../include/configs/mpc5121ads.h | 2 +- > > 9 files changed, 7 insertions(+), 402 deletions(-) > > delete mode 100644 > > u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > > > > diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile > > u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile > > index b53232f..4f4c9ec 100644 > > --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile > > +++ u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile > > @@ -38,7 +38,6 @@ COBJS-y += serial.o > > COBJS-y += speed.o > > COBJS-$(CONFIG_FSL_DIU_FB) += diu.o > > COBJS-$(CONFIG_CMD_IDE) += ide.o > > -COBJS-$(CONFIG_IIM) += iim.o > > COBJS-$(CONFIG_PCI) += pci.o > > > > # Stub implementations of cache management functions for USB > > diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > > u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > > deleted file mode 100644 > > index abec8f6..0000000 > > --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c > > +++ /dev/null > > @@ -1,394 +0,0 @@ > > -/* > > - * Copyright 2008 Silicon Turnkey Express, Inc. > > - * Martha Marx <mmarx@silicontkx.com> > > - * > > - * ADS5121 IIM (Fusebox) Interface > > - * > > - * See file CREDITS for list of people who contributed to this > > - * project. > > - * > > - * This program is free software; you can redistribute it and/or > > - * modify it under the terms of the GNU General Public License as > > - * published by the Free Software Foundation; either version 2 of > > - * the License, or (at your option) any later version. > > - * > > - * This program is distributed in the hope that it will be useful, > > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > - * GNU General Public License for more details. > > - * > > - * You should have received a copy of the GNU General Public > > License > > - * along with this program; if not, write to the Free Software > > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > > - * MA 02111-1307 USA > > - */ > > - > > -#include <common.h> > > -#include <command.h> > > -#include <asm/io.h> > > - > > -#ifdef CONFIG_CMD_FUSE > > - > > -DECLARE_GLOBAL_DATA_PTR; > > - > > -static char cur_bank = '1'; > > - > > -char *iim_err_msg(u32 err) > > -{ > > - static char *IIM_errs[] = { > > - "Parity Error in cache", > > - "Explicit Sense Cycle Error", > > - "Write to Locked Register Error", > > - "Read Protect Error", > > - "Override Protect Error", > > - "Write Protect Error"}; > > - > > - int i; > > - > > - if (!err) > > - return ""; > > - for (i = 1; i < 8; i++) > > - if (err & (1 << i)) > > - printf("IIM - %s\n", IIM_errs[i-1]); > > - return ""; > > -} > > - > > -int in_range(int n, int min, int max, char *err, char *usg) > > -{ > > - if (n > max || n < min) { > > - printf(err); > > - printf("Usage:\n%s\n", usg); > > - return 0; > > - } > > - return 1; > > -} > > - > > -int ads5121_fuse_read(int bank, int fstart, int num) > > -{ > > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > > - u32 *iim_fb, dummy; > > - int f, ctr; > > - > > - out_be32(&iim->err, in_be32(&iim->err)); > > - if (bank == 0) > > - iim_fb = (u32 *)&(iim->fbac0); > > - else > > - iim_fb = (u32 *)&(iim->fbac1); > > -/* try a read to see if Read Protect is set */ > > - dummy = in_be32(&iim_fb[0]); > > - if (in_be32(&iim->err) & IIM_ERR_RPE) { > > - printf("\tRead protect fuse is set\n"); > > - out_be32(&iim->err, IIM_ERR_RPE); > > - return 0; > > - } > > - printf("Reading Bank %d cache\n", bank); > > - for (f = fstart, ctr = 0; num > 0; ctr++, num--, f++) { > > - if (ctr % 4 == 0) > > - printf("F%2d:", f); > > - printf("\t%#04x", (u8)(iim_fb[f])); > > - if (ctr % 4 == 3) > > - printf("\n"); > > - } > > - if (ctr % 4 != 0) > > - printf("\n"); > > -} > > - > > -int ads5121_fuse_override(int bank, int f, u8 val) > > -{ > > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > > - u32 *iim_fb; > > - u32 iim_stat; > > - int i; > > - > > - out_be32(&iim->err, in_be32(&iim->err)); > > - if (bank == 0) > > - iim_fb = (u32 *)&(iim->fbac0); > > - else > > - iim_fb = (u32 *)&(iim->fbac1); > > -/* try a read to see if Read Protect is set */ > > - iim_stat = in_be32(&iim_fb[0]); > > - if (in_be32(&iim->err) & IIM_ERR_RPE) { > > - printf("Read protect fuse is set on bank %d;" > > - "Override protect may also be set\n", bank); > > - printf("An attempt will be made to override\n"); > > - out_be32(&iim->err, IIM_ERR_RPE); > > - } > > - if (iim_stat & IIM_FBAC_FBOP) { > > - printf("Override protect fuse is set on bank %d\n", bank); > > - return 1; > > - } > > - if (f > IIM_FMAX) /* reset the entire bank */ > > - for (i = 0; i < IIM_FMAX + 1; i++) > > - out_be32(&iim_fb[i], 0); > > - else > > - out_be32(&iim_fb[f], val); > > - return 0; > > -} > > - > > -int ads5121_fuse_prog(cmd_tbl_t *cmdtp, int bank, char > > *fuseno_bitno) > > -{ > > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > > - int f, i, bitno; > > - u32 stat, err; > > - > > - f = simple_strtol(fuseno_bitno, NULL, 10); > > - if (f == 0 && fuseno_bitno[0] != '0') > > - f = -1; > > - if (!in_range(f, 0, IIM_FMAX, > > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > > - return 1; > > - bitno = -1; > > - for (i = 0; i < 6; i++) { > > - if (fuseno_bitno[i] == '_') { > > - bitno = simple_strtol(&(fuseno_bitno[i+1]), NULL, 10); > > - if (bitno == 0 && fuseno_bitno[i+1] != '0') > > - bitno = -1; > > - break; > > - } > > - } > > - if (!in_range(bitno, 0, 7, "Bit number ranges from 0-7\n" > > - "Example of <frow_bitno>: \"18_4\" sets bit 4 of row 18\n", > > - cmdtp->usage)) > > - return 1; > > - out_be32(&iim->err, in_be32(&iim->err)); > > - out_be32(&iim->prg_p, IIM_PRG_P_SET); > > - out_be32(&iim->ua, IIM_SET_UA(bank, f)); > > - out_be32(&iim->la, IIM_SET_LA(f, bitno)); > > -#ifdef DEBUG > > - printf("Programming disabled with DEBUG defined \n"); > > - printf(""Set up to pro > > - printf("iim.ua = %x; iim.la = %x\n", iim->ua, iim->la); > > -#else > > - out_be32(&iim->fctl, IIM_FCTL_PROG_PULSE | IIM_FCTL_PROG); > > - do > > - udelay(20); > > - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); > > - out_be32(&iim->prg_p, 0); > > - err = in_be32(&iim->err); > > - if (stat & IIM_STAT_PRGD) { > > - if (!(err & (IIM_ERR_WPE | IIM_ERR_WPE))) { > > - printf("Fuse is successfully set"); > > - if (err) > > - printf(" - however there are other errors"); > > - printf("\n"); > > - } > > - iim->stat = 0; > > - } > > - if (err) { > > - iim_err_msg(err); > > - out_be32(&iim->err, in_be32(&iim->err)); > > - } > > -#endif > > -} > > - > > -int ads5121_fuse_sense(int bank, int fstart, int num) > > -{ > > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > > - u32 iim_fbac; > > - u32 stat, err, err_hold = 0; > > - int f, ctr; > > - > > - out_be32(&iim->err, in_be32(&iim->err)); > > - if (bank == 0) > > - iim_fbac = in_be32(&iim->fbac0); > > - else > > - iim_fbac = in_be32(&iim->fbac1); > > - if (iim_fbac & IIM_FBAC_FBESP) { > > - printf("\tSense Protect disallows this operation\n"); > > - out_be32(&iim->err, IIM_FBAC_FBESP); > > - return 1; > > - } > > - err = in_be32(&iim->err); > > - if (err) { > > - iim_err_msg(err); > > - err_hold |= err; > > - } > > - if (err & IIM_ERR_RPE) > > - printf("\tRead protect fuse is set; " > > - "Sense Protect may be set but will be attempted\n"); > > - if (err) > > - out_be32(&iim->err, err); > > - printf("Sensing fuse(s) on Bank %d\n", bank); > > - for (f = fstart, ctr = 0; num > 0; ctr++, f++, num--) { > > - out_be32(&iim->ua, IIM_SET_UA(bank, f)); > > - out_be32(&iim->la, IIM_SET_LA(f, 0)); > > - out_be32(&iim->fctl, IIM_FCTL_ESNS_N); > > - do > > - udelay(20); > > - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); > > - err = in_be32(&iim->err); > > - if (err & IIM_ERR_SNSE) { > > - iim_err_msg(err); > > - out_be32(&iim->err, IIM_ERR_SNSE); > > - return 1; > > - } > > - if (stat & IIM_STAT_SNSD) { > > - out_be32(&iim->stat, 0); > > - if (ctr % 4 == 0) > > - printf("F%2d:", f); > > - printf("\t%#04x", (u8)iim->sdat); > > - if (ctr % 4 == 3) > > - printf("\n"); > > - } > > - if (err) { > > - err_hold |= err; > > - out_be32(&iim->err, err); > > - } > > - } > > - if (ctr % 4 != 0) > > - printf("\n"); > > - if (err_hold) > > - iim_err_msg(err_hold); > > - > > - return 0; > > -} > > - > > -int ads5121_fuse_stat(int bank) > > -{ > > - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; > > - u32 iim_fbac; > > - u32 err; > > - > > - out_be32(&iim->err, in_be32(&iim->err)); > > - if (bank == 0) > > - iim_fbac = in_be32(&iim->fbac0); > > - else > > - iim_fbac = in_be32(&iim->fbac1); > > - err = in_be32(&iim->err); > > - if (err) > > - iim_err_msg(err); > > - if (err & IIM_ERR_RPE || iim_fbac & IIM_FBAC_FBRP) { > > - if (iim_fbac == 0) > > - printf("Since protection settings can't be read - " > > - "try sensing fuse row 0;\n"); > > - return 0; > > - } > > - if (iim_fbac & IIM_PROTECTION) > > - printf("Protection Fuses Bank %d = %#04x:\n", bank, iim_fbac); > > - else if (!(err & IIM_ERR_RPE)) > > - printf("No Protection fuses are set\n"); > > - if (iim_fbac & IIM_FBAC_FBWP) > > - printf("\tWrite Protect fuse is set\n"); > > - if (iim_fbac & IIM_FBAC_FBOP) > > - printf("\tOverride Protect fuse is set\n"); > > - if (iim_fbac & IIM_FBAC_FBESP) > > - printf("\tSense Protect Fuse is set\n"); > > - out_be32(&iim->err, in_be32(&iim->err)); > > - > > - return 0; > > -} > > - > > -int do_ads5121_fuse(cmd_tbl_t *cmdtp, int flag, int argc, char * > > const argv[]) > > -{ > > - int frow, n, v, bank; > > - > > - if (cur_bank == '0') > > - bank = 0; > > - else > > - bank = 1; > > - > > - switch (argc) { > > - case 0: > > - case 1: > > - printf("Usage:\n%s\n", cmdtp->usage); > > - return 1; > > - case 2: > > - if (strncmp(argv[1], "stat", 4) == 0) > > - return ads5121_fuse_stat(bank); > > - if (strncmp(argv[1], "read", 4) == 0) > > - return ads5121_fuse_read(bank, 0, IIM_FMAX + 1); > > - if (strncmp(argv[1], "sense", 5) == 0) > > - return ads5121_fuse_sense(bank, 0, IIM_FMAX + 1); > > - if (strncmp(argv[1], "ovride", 6) == 0) > > - return ads5121_fuse_override(bank, IIM_FMAX + 1, 0); > > - if (strncmp(argv[1], "bank", 4) == 0) { > > - printf("Active Fuse Bank is %c\n", cur_bank); > > - return 0; > > - } > > - printf("Usage:\n%s\n", cmdtp->usage); > > - return 1; > > - case 3: > > - if (strncmp(argv[1], "bank", 4) == 0) { > > - if (argv[2][0] == '0') > > - cur_bank = '0'; > > - else if (argv[2][0] == '1') > > - cur_bank = '1'; > > - else { > > - printf("Usage:\n%s\n", cmdtp->usage); > > - return 1; > > - } > > - > > - printf("Setting Active Fuse Bank to %c\n", cur_bank); > > - return 0; > > - } > > - if (strncmp(argv[1], "prog", 4) == 0) > > - return ads5121_fuse_prog(cmdtp, bank, argv[2]); > > - > > - frow = (int)simple_strtol(argv[2], NULL, 10); > > - if (frow == 0 && argv[2][0] != '0') > > - frow = -1; > > - if (!in_range(frow, 0, IIM_FMAX, > > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > > - return 1; > > - if (strncmp(argv[1], "read", 4) == 0) > > - return ads5121_fuse_read(bank, frow, 1); > > - if (strncmp(argv[1], "ovride", 6) == 0) > > - return ads5121_fuse_override(bank, frow, 0); > > - if (strncmp(argv[1], "sense", 5) == 0) > > - return ads5121_fuse_sense(bank, frow, 1); > > - printf("Usage:\n%s\n", cmdtp->usage); > > - return 1; > > - case 4: > > - frow = (int)simple_strtol(argv[2], NULL, 10); > > - if (frow == 0 && argv[2][0] != '0') > > - frow = -1; > > - if (!in_range(frow, 0, IIM_FMAX, > > - "<frow> must be between 0-31\n\n", cmdtp->usage)) > > - return 1; > > - if (strncmp(argv[1], "read", 4) == 0) { > > - n = (int)simple_strtol(argv[3], NULL, 10); > > - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, > > - "<frow>+<n> must be between 1-32\n\n", > > - cmdtp->usage)) > > - return 1; > > - return ads5121_fuse_read(bank, frow, n); > > - } > > - if (strncmp(argv[1], "ovride", 6) == 0) { > > - v = (int)simple_strtol(argv[3], NULL, 10); > > - return ads5121_fuse_override(bank, frow, v); > > - } > > - if (strncmp(argv[1], "sense", 5) == 0) { > > - n = (int)simple_strtol(argv[3], NULL, 10); > > - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, > > - "<frow>+<n> must be between 1-32\n\n", > > - cmdtp->usage)) > > - return 1; > > - return ads5121_fuse_sense(bank, frow, n); > > - } > > - printf("Usage:\n%s\n", cmdtp->usage); > > - return 1; > > - default: /* at least 5 args */ > > - printf("Usage:\n%s\n", cmdtp->usage); > > - return 1; > > - } > > -} > > - > > -U_BOOT_CMD( > > - fuse, CONFIG_SYS_MAXARGS, 0, do_ads5121_fuse, > > - " - Read, Sense, Override or Program Fuses\n", > > - "bank <n> - sets active Fuse Bank to 0 or 1\n" > > - " no args shows current active bank\n" > > - "fuse stat - print active fuse bank's protection status\n" > > - "fuse read [<frow> [<n>]] - print <n> fuse rows starting at > > <frow>\n" > > - " no args to print entire bank's fuses\n" > > - "fuse ovride [<frow> [<v>]]- override fuses at <frow> with <v>\n" > > - " no <v> defaults to 0 for the row\n" > > - " no args resets entire bank to 0\n" > > - " NOTE - settings persist until hard reset\n" > > - "fuse sense [<frow>] - senses current fuse at <frow>\n" > > - " no args for entire bank\n" > > - "fuse prog <frow_bit> - program fuse at row <frow>, bit > > <_bit>\n" > > - " <frow> is 0-31, <bit> is 0-7; eg. 13_2 \n" > > - " WARNING - this is permanent" > > -); > > -#endif /* CONFIG_CMD_FUSE */ > > diff --git u-boot-4d3c95f.orig/board/davedenx/aria/aria.c > > u-boot-4d3c95f/board/davedenx/aria/aria.c > > index 31b079b..d2ffba4 100644 > > --- u-boot-4d3c95f.orig/board/davedenx/aria/aria.c > > +++ u-boot-4d3c95f/board/davedenx/aria/aria.c > > @@ -92,7 +92,7 @@ int board_early_init_f(void) > > */ > > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > > #endif > > > > diff --git u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c > > u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c > > index 748ad7c..804a022 100644 > > --- u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c > > +++ u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c > > @@ -110,7 +110,7 @@ int board_early_init_f(void) > > */ > > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > > #endif > > > > diff --git > > u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c > > u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c > > index 97eeab3..0d33680 100644 > > --- u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c > > +++ u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c > > @@ -129,7 +129,7 @@ int board_early_init_f(void) > > */ > > out_be32 (&im->clk.sccr[0], SCCR1_CLOCKS_EN); > > out_be32 (&im->clk.sccr[1], SCCR2_CLOCKS_EN); > > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > > setbits_be32 (&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > > #endif > > > > diff --git u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c > > u-boot-4d3c95f/board/pdm360ng/pdm360ng.c > > index 2082ad4..dcff9c5 100644 > > --- u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c > > +++ u-boot-4d3c95f/board/pdm360ng/pdm360ng.c > > @@ -94,7 +94,7 @@ int board_early_init_f(void) > > */ > > out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); > > out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); > > -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) > > +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) > > setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); > > #endif > > > > diff --git u-boot-4d3c95f.orig/include/configs/aria.h > > u-boot-4d3c95f/include/configs/aria.h > > index b21b495..cb20641 100644 > > --- u-boot-4d3c95f.orig/include/configs/aria.h > > +++ u-boot-4d3c95f/include/configs/aria.h > > @@ -378,7 +378,7 @@ > > /* > > * IIM - IC Identification Module > > */ > > -#undef CONFIG_IIM > > +#undef CONFIG_FSL_IIM > > > > /* > > * EEPROM configuration for Atmel AT24C32A-10TQ-2.7: > > diff --git u-boot-4d3c95f.orig/include/configs/mecp5123.h > > u-boot-4d3c95f/include/configs/mecp5123.h > > index b41bda9..52a159a 100644 > > --- u-boot-4d3c95f.orig/include/configs/mecp5123.h > > +++ u-boot-4d3c95f/include/configs/mecp5123.h > > @@ -250,7 +250,7 @@ > > /* > > * IIM - IC Identification Module > > */ > > -#undef CONFIG_IIM > > +#undef CONFIG_FSL_IIM > > > > /* > > * EEPROM configuration > > diff --git u-boot-4d3c95f.orig/include/configs/mpc5121ads.h > > u-boot-4d3c95f/include/configs/mpc5121ads.h > > index 9d1327f..88dd9bb 100644 > > --- u-boot-4d3c95f.orig/include/configs/mpc5121ads.h > > +++ u-boot-4d3c95f/include/configs/mpc5121ads.h > > @@ -346,7 +346,7 @@ > > /* > > * IIM - IC Identification Module > > */ > > -#undef CONFIG_IIM > > +#undef CONFIG_FSL_IIM > > > > /* > > * EEPROM configuration > > > > Generally agree if we can share code. This is MPC5121 specific, I > will > let Anatolji to add his comments. Can you review this series please? Thanks in advance. Best regards, Benoît
diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile index b53232f..4f4c9ec 100644 --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/Makefile +++ u-boot-4d3c95f/arch/powerpc/cpu/mpc512x/Makefile @@ -38,7 +38,6 @@ COBJS-y += serial.o COBJS-y += speed.o COBJS-$(CONFIG_FSL_DIU_FB) += diu.o COBJS-$(CONFIG_CMD_IDE) += ide.o -COBJS-$(CONFIG_IIM) += iim.o COBJS-$(CONFIG_PCI) += pci.o # Stub implementations of cache management functions for USB diff --git u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c deleted file mode 100644 index abec8f6..0000000 --- u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright 2008 Silicon Turnkey Express, Inc. - * Martha Marx <mmarx@silicontkx.com> - * - * ADS5121 IIM (Fusebox) Interface - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include <common.h> -#include <command.h> -#include <asm/io.h> - -#ifdef CONFIG_CMD_FUSE - -DECLARE_GLOBAL_DATA_PTR; - -static char cur_bank = '1'; - -char *iim_err_msg(u32 err) -{ - static char *IIM_errs[] = { - "Parity Error in cache", - "Explicit Sense Cycle Error", - "Write to Locked Register Error", - "Read Protect Error", - "Override Protect Error", - "Write Protect Error"}; - - int i; - - if (!err) - return ""; - for (i = 1; i < 8; i++) - if (err & (1 << i)) - printf("IIM - %s\n", IIM_errs[i-1]); - return ""; -} - -int in_range(int n, int min, int max, char *err, char *usg) -{ - if (n > max || n < min) { - printf(err); - printf("Usage:\n%s\n", usg); - return 0; - } - return 1; -} - -int ads5121_fuse_read(int bank, int fstart, int num) -{ - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; - u32 *iim_fb, dummy; - int f, ctr; - - out_be32(&iim->err, in_be32(&iim->err)); - if (bank == 0) - iim_fb = (u32 *)&(iim->fbac0); - else - iim_fb = (u32 *)&(iim->fbac1); -/* try a read to see if Read Protect is set */ - dummy = in_be32(&iim_fb[0]); - if (in_be32(&iim->err) & IIM_ERR_RPE) { - printf("\tRead protect fuse is set\n"); - out_be32(&iim->err, IIM_ERR_RPE); - return 0; - } - printf("Reading Bank %d cache\n", bank); - for (f = fstart, ctr = 0; num > 0; ctr++, num--, f++) { - if (ctr % 4 == 0) - printf("F%2d:", f); - printf("\t%#04x", (u8)(iim_fb[f])); - if (ctr % 4 == 3) - printf("\n"); - } - if (ctr % 4 != 0) - printf("\n"); -} - -int ads5121_fuse_override(int bank, int f, u8 val) -{ - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; - u32 *iim_fb; - u32 iim_stat; - int i; - - out_be32(&iim->err, in_be32(&iim->err)); - if (bank == 0) - iim_fb = (u32 *)&(iim->fbac0); - else - iim_fb = (u32 *)&(iim->fbac1); -/* try a read to see if Read Protect is set */ - iim_stat = in_be32(&iim_fb[0]); - if (in_be32(&iim->err) & IIM_ERR_RPE) { - printf("Read protect fuse is set on bank %d;" - "Override protect may also be set\n", bank); - printf("An attempt will be made to override\n"); - out_be32(&iim->err, IIM_ERR_RPE); - } - if (iim_stat & IIM_FBAC_FBOP) { - printf("Override protect fuse is set on bank %d\n", bank); - return 1; - } - if (f > IIM_FMAX) /* reset the entire bank */ - for (i = 0; i < IIM_FMAX + 1; i++) - out_be32(&iim_fb[i], 0); - else - out_be32(&iim_fb[f], val); - return 0; -} - -int ads5121_fuse_prog(cmd_tbl_t *cmdtp, int bank, char *fuseno_bitno) -{ - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; - int f, i, bitno; - u32 stat, err; - - f = simple_strtol(fuseno_bitno, NULL, 10); - if (f == 0 && fuseno_bitno[0] != '0') - f = -1; - if (!in_range(f, 0, IIM_FMAX, - "<frow> must be between 0-31\n\n", cmdtp->usage)) - return 1; - bitno = -1; - for (i = 0; i < 6; i++) { - if (fuseno_bitno[i] == '_') { - bitno = simple_strtol(&(fuseno_bitno[i+1]), NULL, 10); - if (bitno == 0 && fuseno_bitno[i+1] != '0') - bitno = -1; - break; - } - } - if (!in_range(bitno, 0, 7, "Bit number ranges from 0-7\n" - "Example of <frow_bitno>: \"18_4\" sets bit 4 of row 18\n", - cmdtp->usage)) - return 1; - out_be32(&iim->err, in_be32(&iim->err)); - out_be32(&iim->prg_p, IIM_PRG_P_SET); - out_be32(&iim->ua, IIM_SET_UA(bank, f)); - out_be32(&iim->la, IIM_SET_LA(f, bitno)); -#ifdef DEBUG - printf("Programming disabled with DEBUG defined \n"); - printf(""Set up to pro - printf("iim.ua = %x; iim.la = %x\n", iim->ua, iim->la); -#else - out_be32(&iim->fctl, IIM_FCTL_PROG_PULSE | IIM_FCTL_PROG); - do - udelay(20); - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); - out_be32(&iim->prg_p, 0); - err = in_be32(&iim->err); - if (stat & IIM_STAT_PRGD) { - if (!(err & (IIM_ERR_WPE | IIM_ERR_WPE))) { - printf("Fuse is successfully set"); - if (err) - printf(" - however there are other errors"); - printf("\n"); - } - iim->stat = 0; - } - if (err) { - iim_err_msg(err); - out_be32(&iim->err, in_be32(&iim->err)); - } -#endif -} - -int ads5121_fuse_sense(int bank, int fstart, int num) -{ - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; - u32 iim_fbac; - u32 stat, err, err_hold = 0; - int f, ctr; - - out_be32(&iim->err, in_be32(&iim->err)); - if (bank == 0) - iim_fbac = in_be32(&iim->fbac0); - else - iim_fbac = in_be32(&iim->fbac1); - if (iim_fbac & IIM_FBAC_FBESP) { - printf("\tSense Protect disallows this operation\n"); - out_be32(&iim->err, IIM_FBAC_FBESP); - return 1; - } - err = in_be32(&iim->err); - if (err) { - iim_err_msg(err); - err_hold |= err; - } - if (err & IIM_ERR_RPE) - printf("\tRead protect fuse is set; " - "Sense Protect may be set but will be attempted\n"); - if (err) - out_be32(&iim->err, err); - printf("Sensing fuse(s) on Bank %d\n", bank); - for (f = fstart, ctr = 0; num > 0; ctr++, f++, num--) { - out_be32(&iim->ua, IIM_SET_UA(bank, f)); - out_be32(&iim->la, IIM_SET_LA(f, 0)); - out_be32(&iim->fctl, IIM_FCTL_ESNS_N); - do - udelay(20); - while ((stat = in_be32(&iim->stat)) & IIM_STAT_BUSY); - err = in_be32(&iim->err); - if (err & IIM_ERR_SNSE) { - iim_err_msg(err); - out_be32(&iim->err, IIM_ERR_SNSE); - return 1; - } - if (stat & IIM_STAT_SNSD) { - out_be32(&iim->stat, 0); - if (ctr % 4 == 0) - printf("F%2d:", f); - printf("\t%#04x", (u8)iim->sdat); - if (ctr % 4 == 3) - printf("\n"); - } - if (err) { - err_hold |= err; - out_be32(&iim->err, err); - } - } - if (ctr % 4 != 0) - printf("\n"); - if (err_hold) - iim_err_msg(err_hold); - - return 0; -} - -int ads5121_fuse_stat(int bank) -{ - iim512x_t *iim = &((immap_t *) CONFIG_SYS_IMMR)->iim; - u32 iim_fbac; - u32 err; - - out_be32(&iim->err, in_be32(&iim->err)); - if (bank == 0) - iim_fbac = in_be32(&iim->fbac0); - else - iim_fbac = in_be32(&iim->fbac1); - err = in_be32(&iim->err); - if (err) - iim_err_msg(err); - if (err & IIM_ERR_RPE || iim_fbac & IIM_FBAC_FBRP) { - if (iim_fbac == 0) - printf("Since protection settings can't be read - " - "try sensing fuse row 0;\n"); - return 0; - } - if (iim_fbac & IIM_PROTECTION) - printf("Protection Fuses Bank %d = %#04x:\n", bank, iim_fbac); - else if (!(err & IIM_ERR_RPE)) - printf("No Protection fuses are set\n"); - if (iim_fbac & IIM_FBAC_FBWP) - printf("\tWrite Protect fuse is set\n"); - if (iim_fbac & IIM_FBAC_FBOP) - printf("\tOverride Protect fuse is set\n"); - if (iim_fbac & IIM_FBAC_FBESP) - printf("\tSense Protect Fuse is set\n"); - out_be32(&iim->err, in_be32(&iim->err)); - - return 0; -} - -int do_ads5121_fuse(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int frow, n, v, bank; - - if (cur_bank == '0') - bank = 0; - else - bank = 1; - - switch (argc) { - case 0: - case 1: - printf("Usage:\n%s\n", cmdtp->usage); - return 1; - case 2: - if (strncmp(argv[1], "stat", 4) == 0) - return ads5121_fuse_stat(bank); - if (strncmp(argv[1], "read", 4) == 0) - return ads5121_fuse_read(bank, 0, IIM_FMAX + 1); - if (strncmp(argv[1], "sense", 5) == 0) - return ads5121_fuse_sense(bank, 0, IIM_FMAX + 1); - if (strncmp(argv[1], "ovride", 6) == 0) - return ads5121_fuse_override(bank, IIM_FMAX + 1, 0); - if (strncmp(argv[1], "bank", 4) == 0) { - printf("Active Fuse Bank is %c\n", cur_bank); - return 0; - } - printf("Usage:\n%s\n", cmdtp->usage); - return 1; - case 3: - if (strncmp(argv[1], "bank", 4) == 0) { - if (argv[2][0] == '0') - cur_bank = '0'; - else if (argv[2][0] == '1') - cur_bank = '1'; - else { - printf("Usage:\n%s\n", cmdtp->usage); - return 1; - } - - printf("Setting Active Fuse Bank to %c\n", cur_bank); - return 0; - } - if (strncmp(argv[1], "prog", 4) == 0) - return ads5121_fuse_prog(cmdtp, bank, argv[2]); - - frow = (int)simple_strtol(argv[2], NULL, 10); - if (frow == 0 && argv[2][0] != '0') - frow = -1; - if (!in_range(frow, 0, IIM_FMAX, - "<frow> must be between 0-31\n\n", cmdtp->usage)) - return 1; - if (strncmp(argv[1], "read", 4) == 0) - return ads5121_fuse_read(bank, frow, 1); - if (strncmp(argv[1], "ovride", 6) == 0) - return ads5121_fuse_override(bank, frow, 0); - if (strncmp(argv[1], "sense", 5) == 0) - return ads5121_fuse_sense(bank, frow, 1); - printf("Usage:\n%s\n", cmdtp->usage); - return 1; - case 4: - frow = (int)simple_strtol(argv[2], NULL, 10); - if (frow == 0 && argv[2][0] != '0') - frow = -1; - if (!in_range(frow, 0, IIM_FMAX, - "<frow> must be between 0-31\n\n", cmdtp->usage)) - return 1; - if (strncmp(argv[1], "read", 4) == 0) { - n = (int)simple_strtol(argv[3], NULL, 10); - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, - "<frow>+<n> must be between 1-32\n\n", - cmdtp->usage)) - return 1; - return ads5121_fuse_read(bank, frow, n); - } - if (strncmp(argv[1], "ovride", 6) == 0) { - v = (int)simple_strtol(argv[3], NULL, 10); - return ads5121_fuse_override(bank, frow, v); - } - if (strncmp(argv[1], "sense", 5) == 0) { - n = (int)simple_strtol(argv[3], NULL, 10); - if (!in_range(frow + n, frow + 1, IIM_FMAX + 1, - "<frow>+<n> must be between 1-32\n\n", - cmdtp->usage)) - return 1; - return ads5121_fuse_sense(bank, frow, n); - } - printf("Usage:\n%s\n", cmdtp->usage); - return 1; - default: /* at least 5 args */ - printf("Usage:\n%s\n", cmdtp->usage); - return 1; - } -} - -U_BOOT_CMD( - fuse, CONFIG_SYS_MAXARGS, 0, do_ads5121_fuse, - " - Read, Sense, Override or Program Fuses\n", - "bank <n> - sets active Fuse Bank to 0 or 1\n" - " no args shows current active bank\n" - "fuse stat - print active fuse bank's protection status\n" - "fuse read [<frow> [<n>]] - print <n> fuse rows starting at <frow>\n" - " no args to print entire bank's fuses\n" - "fuse ovride [<frow> [<v>]]- override fuses at <frow> with <v>\n" - " no <v> defaults to 0 for the row\n" - " no args resets entire bank to 0\n" - " NOTE - settings persist until hard reset\n" - "fuse sense [<frow>] - senses current fuse at <frow>\n" - " no args for entire bank\n" - "fuse prog <frow_bit> - program fuse at row <frow>, bit <_bit>\n" - " <frow> is 0-31, <bit> is 0-7; eg. 13_2 \n" - " WARNING - this is permanent" -); -#endif /* CONFIG_CMD_FUSE */ diff --git u-boot-4d3c95f.orig/board/davedenx/aria/aria.c u-boot-4d3c95f/board/davedenx/aria/aria.c index 31b079b..d2ffba4 100644 --- u-boot-4d3c95f.orig/board/davedenx/aria/aria.c +++ u-boot-4d3c95f/board/davedenx/aria/aria.c @@ -92,7 +92,7 @@ int board_early_init_f(void) */ out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); #endif diff --git u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c index 748ad7c..804a022 100644 --- u-boot-4d3c95f.orig/board/esd/mecp5123/mecp5123.c +++ u-boot-4d3c95f/board/esd/mecp5123/mecp5123.c @@ -110,7 +110,7 @@ int board_early_init_f(void) */ out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); #endif diff --git u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c index 97eeab3..0d33680 100644 --- u-boot-4d3c95f.orig/board/freescale/mpc5121ads/mpc5121ads.c +++ u-boot-4d3c95f/board/freescale/mpc5121ads/mpc5121ads.c @@ -129,7 +129,7 @@ int board_early_init_f(void) */ out_be32 (&im->clk.sccr[0], SCCR1_CLOCKS_EN); out_be32 (&im->clk.sccr[1], SCCR2_CLOCKS_EN); -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) setbits_be32 (&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); #endif diff --git u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c u-boot-4d3c95f/board/pdm360ng/pdm360ng.c index 2082ad4..dcff9c5 100644 --- u-boot-4d3c95f.orig/board/pdm360ng/pdm360ng.c +++ u-boot-4d3c95f/board/pdm360ng/pdm360ng.c @@ -94,7 +94,7 @@ int board_early_init_f(void) */ out_be32(&im->clk.sccr[0], SCCR1_CLOCKS_EN); out_be32(&im->clk.sccr[1], SCCR2_CLOCKS_EN); -#if defined(CONFIG_IIM) || defined(CONFIG_CMD_FUSE) +#if defined(CONFIG_FSL_IIM) || defined(CONFIG_CMD_FUSE) setbits_be32(&im->clk.sccr[1], CLOCK_SCCR2_IIM_EN); #endif diff --git u-boot-4d3c95f.orig/include/configs/aria.h u-boot-4d3c95f/include/configs/aria.h index b21b495..cb20641 100644 --- u-boot-4d3c95f.orig/include/configs/aria.h +++ u-boot-4d3c95f/include/configs/aria.h @@ -378,7 +378,7 @@ /* * IIM - IC Identification Module */ -#undef CONFIG_IIM +#undef CONFIG_FSL_IIM /* * EEPROM configuration for Atmel AT24C32A-10TQ-2.7: diff --git u-boot-4d3c95f.orig/include/configs/mecp5123.h u-boot-4d3c95f/include/configs/mecp5123.h index b41bda9..52a159a 100644 --- u-boot-4d3c95f.orig/include/configs/mecp5123.h +++ u-boot-4d3c95f/include/configs/mecp5123.h @@ -250,7 +250,7 @@ /* * IIM - IC Identification Module */ -#undef CONFIG_IIM +#undef CONFIG_FSL_IIM /* * EEPROM configuration diff --git u-boot-4d3c95f.orig/include/configs/mpc5121ads.h u-boot-4d3c95f/include/configs/mpc5121ads.h index 9d1327f..88dd9bb 100644 --- u-boot-4d3c95f.orig/include/configs/mpc5121ads.h +++ u-boot-4d3c95f/include/configs/mpc5121ads.h @@ -346,7 +346,7 @@ /* * IIM - IC Identification Module */ -#undef CONFIG_IIM +#undef CONFIG_FSL_IIM /* * EEPROM configuration
Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> Cc: Wolfgang Denk <wd@denx.de> Cc: Stefano Babic <sbabic@denx.de> --- .../arch/powerpc/cpu/mpc512x/Makefile | 1 - .../arch/powerpc/cpu/mpc512x/iim.c => /dev/null | 394 -------------------- .../board/davedenx/aria/aria.c | 2 +- .../board/esd/mecp5123/mecp5123.c | 2 +- .../board/freescale/mpc5121ads/mpc5121ads.c | 2 +- .../board/pdm360ng/pdm360ng.c | 2 +- .../include/configs/aria.h | 2 +- .../include/configs/mecp5123.h | 2 +- .../include/configs/mpc5121ads.h | 2 +- 9 files changed, 7 insertions(+), 402 deletions(-) delete mode 100644 u-boot-4d3c95f.orig/arch/powerpc/cpu/mpc512x/iim.c