uboot/tools/zynqmp_psu_init_minimize.sh
<<
>>
Prefs
   1#!/bin/bash
   2# SPDX-License-Identifier: GPL-2.0+
   3# Copyright (C) 2018 Michal Simek <michal.simek@xilinx.com>
   4# Copyright (C) 2019 Luca Ceresoli <luca@lucaceresoli.net>
   5
   6usage()
   7{
   8    cat <<EOF
   9
  10Transform a pair of psu_init_gpl.c and .h files produced by the Xilinx
  11Vivado tool for ZynqMP into a smaller psu_init_gpl.c file that is almost
  12checkpatch compliant. Minor coding style might still be needed. Must be
  13run from the top-level U-Boot source directory.
  14
  15Usage:   zynqmp_psu_init_minimize.sh INPUT_DIR OUTPUT_DIR
  16Example: zynqmp_psu_init_minimize.sh \\
  17                 /path/to/original/psu_init_gpl_c_and_h/ \\
  18                 board/xilinx/zynqmp/<my_board>/
  19
  20Notes:   INPUT_DIR must contain both .c and .h files.
  21         If INPUT_DIR and OUTPUT_DIR are the same directory,
  22         psu_init_gpl.c will be overwritten.
  23
  24EOF
  25}
  26
  27set -o errexit -o errtrace
  28set -o nounset
  29
  30if [ $# -ne 2 ]
  31then
  32    usage >&2
  33    exit 1
  34fi
  35
  36IN="${1}/psu_init_gpl.c"
  37OUT="${2}/psu_init_gpl.c"
  38TMP=$(mktemp /tmp/psu_init_gpl.XXXXXX)
  39trap "rm ${TMP}" ERR
  40
  41# Step through a temp file to allow both $IN!=$OUT and $IN==$OUT
  42sed -e '/sleep.h/d' \
  43    -e '/xil_io.h/d' \
  44    ${IN} >${TMP}
  45cp ${TMP} ${OUT}
  46
  47# preprocess to expand defines, then remove cpp lines starting with '#'
  48gcc -I${1} -E ${OUT} -o ${TMP}
  49sed '/^#/d' ${TMP} >${OUT}
  50
  51# Remove trivial code before psu_pll_init_data()
  52sed -ni '/psu_pll_init_data/,$p' ${OUT}
  53
  54# Functions are lowercase in U-Boot, rename them
  55sed -i 's/PSU_Mask_Write/psu_mask_write/g' ${OUT}
  56sed -i 's/mask_pollOnValue/mask_pollonvalue/g' ${OUT}
  57sed -i 's/RegValue/regvalue/g' ${OUT}
  58sed -i 's/MaskStatus/maskstatus/g' ${OUT}
  59
  60sed -i '/&= psu_peripherals_powerdwn_data()/d' ${OUT}
  61
  62FUNCS_TO_REMOVE="psu_protection
  63psu_..._protection
  64psu_init_xppu_aper_ram
  65mask_delay(u32
  66mask_read(u32
  67mask_poll(u32
  68mask_pollonvalue(u32
  69psu_ps_pl_reset_config_data
  70psu_ps_pl_isolation_removal_data
  71psu_apply_master_tz
  72psu_post_config_data
  73psu_post_config_data
  74psu_peripherals_powerdwn_data
  75psu_init_ddr_self_refresh
  76xmpu
  77xppu
  78"
  79for i in $FUNCS_TO_REMOVE; do
  80sed -i "/$i/,/^}$/d" ${OUT}
  81done
  82
  83scripts/Lindent ${OUT}
  84
  85# Prepend 'static' to internal functions
  86sed -i 's/^.*data(void)$/static &/g' ${OUT}
  87sed -i 's/^.*psu_afi_config(void)$/static &/g' ${OUT}
  88sed -i 's/^void init_peripheral/static &/g' ${OUT}
  89sed -i 's/^int serdes/static &/g' ${OUT}
  90sed -i 's/^int init_serdes/static &/g' ${OUT}
  91sed -i 's/^unsigned long /static &/g' ${OUT}
  92
  93sed -i 's/()$/(void)/g' ${OUT}
  94sed -i 's/0X/0x/g' ${OUT}
  95
  96# return (0) -> return 0
  97sed -ri 's/return \(([0-9]+)\)/return \1/g' ${OUT}
  98
  99# Add header
 100cat << EOF >${TMP}
 101// SPDX-License-Identifier: GPL-2.0+
 102/*
 103 * (c) Copyright 2015 Xilinx, Inc. All rights reserved.
 104 */
 105
 106#include <asm/arch/psu_init_gpl.h>
 107#include <xil_io.h>
 108
 109EOF
 110
 111cat ${OUT} >>${TMP}
 112cp ${TMP} ${OUT}
 113
 114# Temporarily convert newlines to do some mangling across lines
 115tr "\n" "\r" <${OUT} >${TMP}
 116
 117# Cleanup empty loops. E.g.:
 118# |while (e) {|
 119# |           | ==> |while (e)|
 120# |    }      |     |    ;    |
 121# |           |
 122sed -i -r 's| \{\r+(\t*)\}\r\r|\n\1\t;\n|g' ${TMP}
 123
 124# Remove empty line between variable declaration
 125sed -i -r 's|\r(\r\t(unsigned )?int )|\1|g' ${TMP}
 126
 127# Remove empty lines at function beginning/end
 128sed -i -e 's|\r{\r\r|\r{\r|g' ${TMP}
 129sed -i -e 's|\r\r}\r|\r}\r|g' ${TMP}
 130
 131# Remove empty lines after '{' line
 132sed -i -e 's| {\r\r| {\r|g' ${TMP}
 133
 134# Remove braces {} around single statement blocks. E.g.:
 135# | while (e) { |    | while (e) |
 136# |     stg();  | => |     stg();|
 137# | }           |
 138sed -i -r 's| \{(\r[^\r]*;)\r\t*\}|\1|g' ${TMP}
 139
 140# Remove Unnecessary parentheses around 'n_code <= 0x3C' and similar. E.g.:
 141# if ((p_code >= 0x26) && ...) -> if (p_code >= 0x26 && ...)
 142sed -i -r 's|\((._code .= [x[:xdigit:]]+)\)|\1|g' ${TMP}
 143
 144# Convert back newlines
 145tr "\r" "\n" <${TMP} >${OUT}
 146
 147rm ${TMP}
 148