board/BuR/common: split br_resetc_bmode function
authorBernhard Messerklinger <bernhard.messerklinger@br-automation.com>
Fri, 4 Apr 2025 07:27:59 +0000 (09:27 +0200)
committerMichal Simek <michal.simek@amd.com>
Wed, 16 Apr 2025 13:39:48 +0000 (15:39 +0200)
Split br_resetc_bmode function to add support for reading of reset
reason in board code with br_resetc_bmode_get.

Signed-off-by: Bernhard Messerklinger <bernhard.messerklinger@br-automation.com>
Link: https://lore.kernel.org/r/20250404072819.69642-4-bernhard.messerklinger@br-automation.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
board/BuR/common/br_resetc.c
board/BuR/common/br_resetc.h

index 248064f..dfe2c2e 100644 (file)
@@ -114,9 +114,73 @@ int br_resetc_bmode(void)
 {
        int rc = 0;
        u16 regw;
+       unsigned int bmode = 0;
+
+       if (!resetc.i2cdev)
+               rc = resetc_init();
+
+       if (rc != 0)
+               return rc;
+
+       board_boot_led(1);
+
+       rc = br_resetc_bmode_get(&bmode);
+       if (rc != 0)
+               return rc;
+
+       LCD_SETCURSOR(1, 8);
+
+       switch (bmode) {
+       case BMODE_PME:
+               LCD_PUTS("entering PME-Mode (netscript).         ");
+               regw = 0x0C0C;
+               break;
+       case BMODE_DEFAULTAR:
+               LCD_PUTS("entering BOOT-mode.                    ");
+               regw = 0x0000;
+               break;
+       case BMODE_DIAG:
+               LCD_PUTS("entering DIAGNOSE-mode.                ");
+               regw = 0x0F0F;
+               break;
+       case BMODE_SERVICE:
+               LCD_PUTS("entering SERVICE mode.                 ");
+               regw = 0xB4B4;
+               break;
+       case BMODE_RUN:
+               LCD_PUTS("loading OS...                          ");
+               regw = 0x0404;
+               break;
+       }
+
+       board_boot_led(0);
+
+       if (resetc.is_psoc)
+               rc = dm_i2c_write(resetc.i2cdev, RSTCTRL_SCRATCHREG0,
+                                 (u8 *)&regw, 2);
+       else
+               rc = dm_i2c_write(resetc.i2cdev, RSTCTRL_SCRATCHREG0,
+                                 (u8 *)&regw, 1);
+
+       if (rc != 0)
+               printf("WARN: cannot write into resetcontroller!\n");
+
+       if (resetc.is_psoc)
+               printf("Reset: PSOC controller\n");
+       else
+               printf("Reset: STM32 controller\n");
+
+       printf("Mode:  %s\n", bootmodeascii[regw & 0x0F]);
+       env_set_ulong("b_mode", regw & 0x0F);
+
+       return rc;
+}
+
+int br_resetc_bmode_get(unsigned int *bmode)
+{
+       int rc = 0;
        u8 regb, scr;
        int cnt;
-       unsigned int bmode = 0;
 
        if (!resetc.i2cdev)
                rc = resetc_init();
@@ -136,13 +200,11 @@ int br_resetc_bmode(void)
                return -1;
        }
 
-       board_boot_led(1);
-
        /* special bootmode from resetcontroller */
        if (regb & 0x4) {
-               bmode = BMODE_DIAG;
+               *bmode = BMODE_DIAG;
        } else if (regb & 0x8) {
-               bmode = BMODE_DEFAULTAR;
+               *bmode = BMODE_DEFAULTAR;
        } else if (board_boot_key() != 0) {
                cnt = 4;
                do {
@@ -169,68 +231,23 @@ int br_resetc_bmode(void)
 
                switch (cnt) {
                case 0:
-                       bmode = BMODE_PME;
+                       *bmode = BMODE_PME;
                        break;
                case 1:
-                       bmode = BMODE_DEFAULTAR;
+                       *bmode = BMODE_DEFAULTAR;
                        break;
                case 2:
-                       bmode = BMODE_DIAG;
+                       *bmode = BMODE_DIAG;
                        break;
                case 3:
-                       bmode = BMODE_SERVICE;
+                       *bmode = BMODE_SERVICE;
                        break;
                }
        } else if ((regb & 0x1) || scr == 0xCC) {
-               bmode = BMODE_PME;
+               *bmode = BMODE_PME;
        } else {
-               bmode = BMODE_RUN;
+               *bmode = BMODE_RUN;
        }
 
-       LCD_SETCURSOR(1, 8);
-
-       switch (bmode) {
-       case BMODE_PME:
-               LCD_PUTS("entering PME-Mode (netscript).         ");
-               regw = 0x0C0C;
-               break;
-       case BMODE_DEFAULTAR:
-               LCD_PUTS("entering BOOT-mode.                    ");
-               regw = 0x0000;
-               break;
-       case BMODE_DIAG:
-               LCD_PUTS("entering DIAGNOSE-mode.                ");
-               regw = 0x0F0F;
-               break;
-       case BMODE_SERVICE:
-               LCD_PUTS("entering SERVICE mode.                 ");
-               regw = 0xB4B4;
-               break;
-       case BMODE_RUN:
-               LCD_PUTS("loading OS...                          ");
-               regw = 0x0404;
-               break;
-       }
-
-       board_boot_led(0);
-
-       if (resetc.is_psoc)
-               rc = dm_i2c_write(resetc.i2cdev, RSTCTRL_SCRATCHREG0,
-                                 (u8 *)&regw, 2);
-       else
-               rc = dm_i2c_write(resetc.i2cdev, RSTCTRL_SCRATCHREG0,
-                                 (u8 *)&regw, 1);
-
-       if (rc != 0)
-               printf("WARN: cannot write into resetcontroller!\n");
-
-       if (resetc.is_psoc)
-               printf("Reset: PSOC controller\n");
-       else
-               printf("Reset: STM32 controller\n");
-
-       printf("Mode:  %s\n", bootmodeascii[regw & 0x0F]);
-       env_set_ulong("b_mode", regw & 0x0F);
-
        return rc;
 }
index 999045b..3bd5ac2 100644 (file)
@@ -11,6 +11,7 @@
 int br_resetc_regget(u8 reg, u8 *dst);
 int br_resetc_regset(u8 reg, u8 val);
 int br_resetc_bmode(void);
+int br_resetc_bmode_get(unsigned int *bmode);
 
 /* reset controller register defines */
 #define RSTCTRL_CTRLREG                0x01