Quantcast
Channel: Processors
Viewing all articles
Browse latest Browse all 148958

Forum Post: RE: How to verify smart reflex voltage targets in AM335x silicon

$
0
0

Thank you for the confirmation!  I have one more comment for those who see the following during Linux boot:

[    1.343170] Compensating OPP0 for 0mV Orig nvalue:0x999888 New nvalue:0x999888
[    1.350830] Compensating OPP1 for 0mV Orig nvalue:0x9a8efd New nvalue:0x9a8efd
[    1.359985] Compensating OPP0 for 0mV Orig nvalue:0x99a696 New nvalue:0x99a696
[    1.367645] Compensating OPP1 for 0mV Orig nvalue:0x999a88 New nvalue:0x999a88
[    1.375274] Compensating OPP2 for 0mV Orig nvalue:0x9a85ee New nvalue:0x9a85ee

In our design, this seems to not related be to lack of smartreflex values.  It appears to be related to the I2C access of the tps65910 regulator driver.  (drivers/regulator/tps65910-regulator.c)  In our platform file, the devices on I2C0 were:

static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] = {    {       /* Baseboard board EEPROM */       I2C_BOARD_INFO("24c256", BASEBOARD_I2C_ADDR),       .platform_data  = &am335x_baseboard_eeprom_info,    },    {       I2C_BOARD_INFO("cpld_reg", 0x35),    },    {       I2C_BOARD_INFO("tps65910", TPS65910_I2C_ID1),       .platform_data  = &am335x_tps65910_info,    }, }; 

Our design doesn't have the eeprom & cpld, but these devices are in am335x_i2c0_boardinfo[]  so that if this kernel is accidentally used on the GP EVM, custom code stops the kernel if there is a successful read from the eeprom.

By trial & error, it seems that having these devices in the list interferes with I2C access to the tps65910.   If the tps65910 I2C access is ok, the following appears during boot:

[    0.140899] tps65910 1-002d: JTAGREVNUM 0x0
[    0.143280] print_constraints: VRTC:
[    0.144714] print_constraints: VIO: at 1800 mV
[    0.147033] print_constraints: VDD1: 600 <--> 1500 mV at 1262 mV normal
[    0.149322] print_constraints: VDD2: 600 <--> 1500 mV at 1137 mV normal
[    0.150329] print_constraints: VDD3: 5000 mV
[    0.151763] print_constraints: VDIG1: at 1800 mV
[    0.153198] print_constraints: VDIG2: at 1800 mV
[    0.154602] print_constraints: VPLL: at 1800 mV
[    0.156036] print_constraints: VDAC: at 1800 mV
[    0.157440] print_constraints: VAUX1: at 1800 mV
[    0.158874] print_constraints: VAUX2: at 3300 mV
[    0.160339] print_constraints: VAUX33: at 3300 mV
[    0.161743] print_constraints: VMMC: at 3300 mV

In my case, if the eeprom & cpld devices are in am335x_i2c0_boardinfo[], I don't see the 'print_constraints' messages and see the 'Compensating OPP#' during boot.  After I removed the eeprom & cpld entries, I saw the 'print_constraints' messages and no more 'Compensating OPP#'.


This leads me to believe that having non-existent devices in  am335x_i2c0_boardinfo[] may put the bus in a strange state which interferes with I2C access to the tps65910.  So designs which have other devices on the same bus as the tps659__ should take care to finish their I2C transactions properly to avoid interfering with the tps659__.

Additionally, I suggest initializing the tps659__ first, then other devices after:

static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] = {    {       I2C_BOARD_INFO("tps65910", TPS65910_I2C_ID1),       .platform_data  = &am335x_tps65910_info,    },    {       // 2nd device    },    {       // 3rd device    }, };


Viewing all articles
Browse latest Browse all 148958

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>