Skip to content
Snippets Groups Projects
Forked from KED Software Projects / Miscellaneous / KED U-Boot Fork
Source project has a limited visibility.
  • Marek Vasut's avatar
    29b59353
    arm: mvebu: a38x: Weed out floating point use · 29b59353
    Marek Vasut authored
    
    For reason unknown, recently, the DDR init code writers are really fond
    of hiding some small floating point operating deep in their creations.
    This patch removes one from the Marvell A38x code.
    
    Instead of returning size of chip as float from ddr3_get_device_size()
    in GiB units, return it as int in MiB units. Since this would interfere
    with the huge switch code in ddr3_calc_mem_cs_size(), rework the code
    to match the change.
    
    Before this patch, the cs_mem_size variable could have these values:
     ( { 16, 32 } x { 8, 16 } x { 0.01, 0.5, 1, 2, 4, 8 } ) / 8 =
       { 0.000000, 0.001250, 0.002500, 0.005000, 0.062500, 0.125000,
         0.250000, 0.500000, 1.000000, 2.000000, 4.000000, }
    The switch code checked for a subset of the resulting RAM sizes, which
    is in range 128 MiB ... 2048 MiB.
    
    With this patch, the cs_mem_size variable can have these values:
     ( { 16, 32 } x { 8, 16 } x { 0, 512, 1024, 2048, 4096, 8192 } ) / 8 =
       { 0, 64, 128, 256, 512, 1024, 2048, 4096 }
    To retain previous behavior, filter out 0 MiB (invalid size), 64 MiB
    and 4096 MiB options.
    
    Removing the floating point stuff also saves 1.5k from text segment:
      clearfog       :  spl/u-boot-spl:all -1592  spl/u-boot-spl:text -1592
    
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
    Cc: Stefan Roese <sr@denx.de>
    Signed-off-by: default avatarStefan Roese <sr@denx.de>
    29b59353
    History
    arm: mvebu: a38x: Weed out floating point use
    Marek Vasut authored
    
    For reason unknown, recently, the DDR init code writers are really fond
    of hiding some small floating point operating deep in their creations.
    This patch removes one from the Marvell A38x code.
    
    Instead of returning size of chip as float from ddr3_get_device_size()
    in GiB units, return it as int in MiB units. Since this would interfere
    with the huge switch code in ddr3_calc_mem_cs_size(), rework the code
    to match the change.
    
    Before this patch, the cs_mem_size variable could have these values:
     ( { 16, 32 } x { 8, 16 } x { 0.01, 0.5, 1, 2, 4, 8 } ) / 8 =
       { 0.000000, 0.001250, 0.002500, 0.005000, 0.062500, 0.125000,
         0.250000, 0.500000, 1.000000, 2.000000, 4.000000, }
    The switch code checked for a subset of the resulting RAM sizes, which
    is in range 128 MiB ... 2048 MiB.
    
    With this patch, the cs_mem_size variable can have these values:
     ( { 16, 32 } x { 8, 16 } x { 0, 512, 1024, 2048, 4096, 8192 } ) / 8 =
       { 0, 64, 128, 256, 512, 1024, 2048, 4096 }
    To retain previous behavior, filter out 0 MiB (invalid size), 64 MiB
    and 4096 MiB options.
    
    Removing the floating point stuff also saves 1.5k from text segment:
      clearfog       :  spl/u-boot-spl:all -1592  spl/u-boot-spl:text -1592
    
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
    Cc: Stefan Roese <sr@denx.de>
    Signed-off-by: default avatarStefan Roese <sr@denx.de>