]> git.sur5r.net Git - u-boot/blobdiff - post/board/lwmon5/dspic.c
ppc4xx: Big lwmon5 board support rework/update
[u-boot] / post / board / lwmon5 / dspic.c
index ff2ed0566fcbf177a45066d40ac7fc57464d6b9e..861673952d36a5e66be661109927f8df9b7876e5 100644 (file)
@@ -38,14 +38,16 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define DSPIC_POST_ERROR_REG   0x800
 #define DSPIC_SYS_ERROR_REG    0x802
-#define DSPIC_VERSION_REG      0x804
+#define DSPIC_SYS_VERSION_REG  0x804
+#define DSPIC_FW_VERSION_REG   0x808
 
 #if CONFIG_POST & CONFIG_SYS_POST_BSPEC1
 
 /* Verify that dsPIC ready test done early at hw init passed ok */
 int dspic_init_post_test(int flags)
 {
-       if (in_be32((void *)CONFIG_SYS_DSPIC_TEST_ADDR) & CONFIG_SYS_DSPIC_TEST_MASK) {
+       if (in_be32((void *)CONFIG_SYS_DSPIC_TEST_ADDR) &
+           CONFIG_SYS_DSPIC_TEST_MASK) {
                post_log("dsPIC init test failed\n");
                return 1;
        }
@@ -57,46 +59,60 @@ int dspic_init_post_test(int flags)
 
 #if CONFIG_POST & CONFIG_SYS_POST_BSPEC2
 /* Read a register from the dsPIC. */
-int dspic_read(ushort reg)
+int dspic_read(ushort reg, ushort *data)
 {
-       uchar buf[2];
+       uchar buf[sizeof(*data)];
+       int rval;
 
        if (i2c_read(CONFIG_SYS_I2C_DSPIC_IO_ADDR, reg, 2, buf, 2))
                return -1;
+       rval = i2c_read(CONFIG_SYS_I2C_DSPIC_IO_ADDR, reg, sizeof(reg),
+                       buf, sizeof(*data));
+       *data = (buf[0] << 8) | buf[1];
 
-       return (uint)((buf[0] << 8) | buf[1]);
+       return rval;
 }
 
 /* Verify error codes regs, display version */
 int dspic_post_test(int flags)
 {
-       int data;
+       ushort data;
        int ret = 0;
 
        post_log("\n");
-       data = dspic_read(DSPIC_VERSION_REG);
-       if (data == -1) {
-               post_log("dsPIC : failed read version\n");
+
+       /* read dspic FW-Version */
+       if (dspic_read(DSPIC_FW_VERSION_REG, &data)) {
+               post_log("dsPIC: failed read FW-Version\n");
+               ret = 1;
+       } else {
+               post_log("dsPIC FW-Version:  %u.%u\n",
+                        (data >> 8) & 0xFF, data & 0xFF);
+       }
+
+       /* read dspic SYS-Version */
+       if (dspic_read(DSPIC_SYS_VERSION_REG, &data)) {
+               post_log("dsPIC: failed read version\n");
                ret = 1;
        } else {
-               post_log("dsPIC version: %u.%u\n",
-                       (data >> 8) & 0xFF, data & 0xFF);
+               post_log("dsPIC SYS-Version: %u.%u\n",
+                        (data >> 8) & 0xFF, data & 0xFF);
        }
 
-       data = dspic_read(DSPIC_POST_ERROR_REG);
-       if (data != 0) ret = 1;
-       if (data == -1) {
-               post_log("dsPIC : failed read POST code\n");
+       /* read dspic POST error code */
+       if (dspic_read(DSPIC_POST_ERROR_REG, &data)) {
+               post_log("dsPIC: failed read POST code\n");
+               ret = 1;
        } else {
-               post_log("dsPIC POST code 0x%04X\n", data);
+               post_log("dsPIC POST-ERROR   code:  0x%04X\n", data);
        }
 
-       data = dspic_read(DSPIC_SYS_ERROR_REG);
-       if (data == -1) {
-               post_log("dsPIC : failed read system error\n");
+       /* read dspic SYS error code */
+       if ((data = dspic_read(DSPIC_SYS_ERROR_REG, &data))) {
+               post_log("dsPIC: failed read system error\n");
                ret = 1;
        } else {
-               post_log("dsPIC SYS-ERROR code: 0x%04X\n", data);
+               post_log("dsPIC SYS-ERROR    code:  0x%04X\n", data);
        }
 
        return ret;