[U-Boot] [PATCH 1/3] arm: am33xx: Fix MPU opp selection

Tom Rini trini at konsulko.com
Wed May 3 12:33:12 UTC 2017


On Tue, May 02, 2017 at 07:40:24PM +0530, Lokesh Vutla wrote:
> Update MPU frequencies and voltages as per the latest
> DM[1] dated: OCT 2011 Revised APRIL 2016, Section 5.4.
> Below is the consolidated data:
> 
> MPU values for PG 2.0 and later(Package ZCZ and ZCE):
> 
>  -------------------------------------------------------
> |	|	  ZCZ		|	  ZCE		|
> |-------------------------------------------------------|
> |	| VDD[V]   | ARM [MHz]	| VDD[V]   | ARM [MHz]  |
> |-------|----------|------------|----------|------------|
> | NITRO |  1.325   |   1000     |   NA     |    NA      |
> |-------|----------|------------|----------|------------|
> | TURBO |   1.26   |    800	|   NA     |    NA      |
> |-------|----------|------------|----------|------------|
> |OPP120 |   1.20   |    720     |   NA     |    NA      |
> |-------|----------|------------|----------|------------|
> |OPP100 |   1.10   |    600     |   1.10   |    600     |
> |-------|----------|------------|----------|------------|
> | OPP50 |   0.95   |    300     |   0.95   |    300     |
>  -------------------------------------------------------
> 
> There is no eFuse blown on PG1.0 Silicons due to which there is
> no way to detect the maximum frequencies supported. So default
> to OPP100 for which both frequency and voltages are common on both
> the packages.

You say OPP100 here, but the code (and table) is for OPP50.  Which means
a good bit of a speed cut.

[snip]
>  /* MAIN PLL Fdll = 550 MHz, by default */
>  #ifndef CONFIG_SYS_MPUCLK
> -#define CONFIG_SYS_MPUCLK	MPUPLL_M_550
> +#define CONFIG_SYS_MPUCLK	MPUPLL_M_500
>  #endif

Update the comment please.  Better yet, Kconfig migration (as this is
only an am33xx thing).

[snip]
> @@ -132,13 +132,21 @@ int am335x_get_efuse_mpu_max_freq(struct ctrl_dev *cdev)
>  
>  	sil_rev = readl(&cdev->deviceid) >> 28;
>  
> -	if (sil_rev == 1)
> -		/* PG 2.0, efuse may not be set. */
> -		return MPUPLL_M_800;
> -	else if (sil_rev >= 2) {
> +	if (sil_rev == 0) {
> +		/* No efuse in PG 1.0. So use OPP100 */
> +		return MPUPLL_M_500;

Isn't that OPP50?

> +	} else if (sil_rev >= 1) {
>  		/* Check what the efuse says our max speed is. */
> -		int efuse_arm_mpu_max_freq;
> +		int efuse_arm_mpu_max_freq, package_type;
>  		efuse_arm_mpu_max_freq = readl(&cdev->efuse_sma);
> +		package_type = (efuse_arm_mpu_max_freq & PACKAGE_TYPE_MASK) >>
> +				PACKAGE_TYPE_SHIFT;
> +
> +		/* PG 2.0, efuse may not be set. */
> +		if (package_type == PACKAGE_TYPE_UNDEFINED || package_type ==
> +		    PACKAGE_TYPE_RESERVED)
> +			return MPUPLL_M_800;
> +
>  		switch ((efuse_arm_mpu_max_freq & DEVICE_ID_MASK)) {
>  		case AM335X_ZCZ_1000:
>  			return MPUPLL_M_1000;
> @@ -155,14 +163,14 @@ int am335x_get_efuse_mpu_max_freq(struct ctrl_dev *cdev)
>  		}
>  	}
>  
> -	/* PG 1.0 or otherwise unknown, use the PG1.0 max */
> -	return MPUPLL_M_720;
> +	/* PG 1.0 or otherwise unknown, use the PG1.0 safe */
> +	return MPUPLL_M_500;

Is the problem here new PG values getting unsafe values?  I'm concerned
about slowing down PG1.0 stuff which is also in the wild, in numbers.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170503/9d9c4e0a/attachment.sig>


More information about the U-Boot mailing list