diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 03c7ce9..df507e2 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -56,7 +56,7 @@
 
 	/* try to read rootfssize (ram image) from environment */
 	p = env_get("rootfssize");
-	if (p != NULL)
+	if (p)
 		strict_strtoul(p, 16, &rootfssize);
 	pram = (rootfssize + CONFIG_KM_RESERVED_PRAM + CONFIG_KM_PHRAM +
 		CONFIG_KM_PNVRAM) / 0x400;
@@ -165,7 +165,7 @@
 	char *p;
 
 	p = get_local_var("IVM_BoardId");
-	if (p == NULL) {
+	if (!p) {
 		printf("can't get the IVM_Boardid\n");
 		return 1;
 	}
@@ -174,7 +174,7 @@
 	printf("set boardid=%s\n", buf);
 
 	p = get_local_var("IVM_HWKey");
-	if (p == NULL) {
+	if (!p) {
 		printf("can't get the IVM_HWKey\n");
 		return 1;
 	}
@@ -186,8 +186,8 @@
 	return 0;
 }
 
-U_BOOT_CMD(km_setboardid, 1, 0, do_setboardid, "setboardid", "read out bid and "
-				 "hwkey from IVM and set in environment");
+U_BOOT_CMD(km_setboardid, 1, 0, do_setboardid, "setboardid",
+	   "read out bid and hwkey from IVM and set in environment");
 
 /*
  * command km_checkbidhwk
@@ -218,14 +218,14 @@
 	 * already stored in the local hush variables
 	 */
 	p = get_local_var("IVM_BoardId");
-	if (p == NULL) {
+	if (!p) {
 		printf("can't get the IVM_Boardid\n");
 		return 1;
 	}
 	rc = strict_strtoul(p, 16, &ivmbid);
 
 	p = get_local_var("IVM_HWKey");
-	if (p == NULL) {
+	if (!p) {
 		printf("can't get the IVM_HWKey\n");
 		return 1;
 	}
@@ -238,10 +238,10 @@
 
 	/* now try to read values from environment if available */
 	p = env_get("boardid");
-	if (p != NULL)
+	if (p)
 		rc = strict_strtoul(p, 16, &envbid);
 	p = env_get("hwkey");
-	if (p != NULL)
+	if (p)
 		rc = strict_strtoul(p, 16, &envhwkey);
 
 	if (rc != 0) {
@@ -263,9 +263,8 @@
 
 			if (verbose) {
 				printf("IVM_BoardId: %ld, IVM_HWKey=%ld\n",
-					ivmbid, ivmhwkey);
-				printf("boardIdHwKeyList: %s\n",
-					bidhwklist);
+				       ivmbid, ivmhwkey);
+				printf("boardIdHwKeyList: %s\n", bidhwklist);
 			}
 			while (!found) {
 				/* loop over each bid/hwkey pair in the list */
@@ -291,13 +290,13 @@
 					while (*rest && !isxdigit(*rest))
 						rest++;
 				}
-				if ((!bid) || (!hwkey)) {
+				if (!bid || !hwkey) {
 					/* end of list */
 					break;
 				}
 				if (verbose) {
 					printf("trying bid=0x%lX, hwkey=%ld\n",
-						bid, hwkey);
+					       bid, hwkey);
 				}
 				/*
 				 * Compare the values of the found entry in the
@@ -305,7 +304,7 @@
 				 * in the inventory eeprom. If they are equal
 				 * set the values in environment variables.
 				 */
-				if ((bid == ivmbid) && (hwkey == ivmhwkey)) {
+				if (bid == ivmbid && hwkey == ivmhwkey) {
 					char buf[10];
 
 					found = 1;
@@ -321,12 +320,12 @@
 	}
 
 	/* compare now the values */
-	if ((ivmbid == envbid) && (ivmhwkey == envhwkey)) {
+	if (ivmbid == envbid && ivmhwkey == envhwkey) {
 		printf("boardid=0x%3lX, hwkey=%ld\n", envbid, envhwkey);
 		rc = 0; /* match */
 	} else {
 		printf("Error: env boardid=0x%3lX, hwkey=%ld\n", envbid,
-			envhwkey);
+		       envhwkey);
 		printf("       IVM bId=0x%3lX, hwKey=%ld\n", ivmbid, ivmhwkey);
 		rc = 1; /* don't match */
 	}
@@ -334,10 +333,8 @@
 }
 
 U_BOOT_CMD(km_checkbidhwk, 2, 0, do_checkboardidhwk,
-		"check boardid and hwkey",
-		"[v]\n  - check environment parameter "\
-		"\"boardIdListHex\" against stored boardid and hwkey "\
-		"from the IVM\n    v: verbose output"
+	   "check boardid and hwkey",
+	   "[v]\n  - check environment parameter \"boardIdListHex\" against stored boardid and hwkey from the IVM\n    v: verbose output"
 );
 
 /*
@@ -356,6 +353,7 @@
 #if defined(CONFIG_POST)
 	testpin = post_hotkeys_pressed();
 #endif
+
 	s = env_get("test_bank");
 	/* when test_bank is not set, act as if testpin is not asserted */
 	testboot = (testpin != 0) && (s);
@@ -370,6 +368,6 @@
 }
 
 U_BOOT_CMD(km_checktestboot, 2, 0, do_checktestboot,
-		"check if testpin is asserted",
-		"[v]\n  v - verbose output"
+	   "check if testpin is asserted",
+	   "[v]\n  v - verbose output"
 );
diff --git a/board/keymile/common/ivm.c b/board/keymile/common/ivm.c
index 60b89fe..e989bf6 100644
--- a/board/keymile/common/ivm.c
+++ b/board/keymile/common/ivm.c
@@ -46,28 +46,27 @@
 {
 	char tempbuf[256];
 
-	if (value != NULL) {
+	if (value) {
 		sprintf(tempbuf, "%s=%s", name, value);
 		return set_local_var(tempbuf, 0);
-	} else {
-		unset_local_var(name);
 	}
+	unset_local_var(name);
 	return 0;
 }
 
 static int ivm_get_value(unsigned char *buf, int len, char *name, int off,
-				int check)
+			 int check)
 {
 	unsigned short	val;
 	unsigned char	valbuf[30];
 
-	if ((buf[off + 0] != buf[off + 2]) &&
-	    (buf[off + 2] != buf[off + 4])) {
+	if (buf[off + 0] != buf[off + 2] &&
+	    buf[off + 2] != buf[off + 4]) {
 		printf("%s Error corrupted %s\n", __func__, name);
 		val = -1;
 	} else {
 		val = buf[off + 0] + (buf[off + 1] << 8);
-		if ((val == 0) && (check == 1))
+		if (val == 0 && check == 1)
 			val = -1;
 	}
 	sprintf((char *)valbuf, "%x", val);
@@ -98,9 +97,9 @@
 }
 
 static int ivm_findinventorystring(int type,
-					unsigned char *const string,
-					unsigned long maxlen,
-					unsigned char *buf)
+				   unsigned char *const string,
+				   unsigned long maxlen,
+				   unsigned char *buf)
 {
 	int xcode = 0;
 	unsigned long cr = 0;
@@ -133,12 +132,12 @@
 	 */
 	if (addr < INVENTORYDATASIZE) {
 		/* Copy the IVM string in the corresponding string */
-		for (; (buf[addr] != '\r')			&&
-			((buf[addr] != ';') ||  (!stop))	&&
-			(size < (maxlen - 1)			&&
-			(addr < INVENTORYDATASIZE)); addr++) {
+		for (; (buf[addr] != '\r')		&&
+		     ((buf[addr] != ';') ||  (!stop))	&&
+		     (size < (maxlen - 1)		&&
+		     (addr < INVENTORYDATASIZE)); addr++) {
 			size += sprintf((char *)string + size, "%c",
-						convert_char (buf[addr]));
+					convert_char (buf[addr]));
 		}
 
 		/*
@@ -176,12 +175,12 @@
 	unsigned long	crceeprom;
 
 	crc = ivm_calc_crc(buf, CONFIG_SYS_IVM_EEPROM_PAGE_LEN - 2);
-	crceeprom = (buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN - 1] + \
+	crceeprom = (buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN - 1] +
 			buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN - 2] * 256);
 	if (crc != crceeprom) {
 		if (block == 0)
-			printf("Error CRC Block: %d EEprom: calculated: \
-			%lx EEprom: %lx\n", block, crc, crceeprom);
+			printf("Error CRC Block: %d EEprom: calculated: %lx EEprom: %lx\n",
+			       block, crc, crceeprom);
 		return -1;
 	}
 	return 0;
@@ -189,7 +188,7 @@
 
 /* take care of the possible MAC address offset and the IVM content offset */
 static int process_mac(unsigned char *valbuf, unsigned char *buf,
-				int offset, bool unique)
+		       int offset, bool unique)
 {
 	unsigned char mac[6];
 	unsigned long val = (buf[4] << 16) + (buf[5] << 8) + buf[6];
@@ -197,9 +196,9 @@
 	/* use an intermediate buffer, to not change IVM content
 	 * MAC address is at offset 1
 	 */
-	memcpy(mac, buf+1, 6);
+	memcpy(mac, buf + 1, 6);
 
-	/* MAC adress can be set to locally administred, this is only allowed
+	/* MAC address can be set to locally administred, this is only allowed
 	 * for interfaces which have now connection to the outside. For these
 	 * addresses we need to set the second bit in the first byte.
 	 */
@@ -222,7 +221,7 @@
 	unsigned char	valbuf[MAC_STR_SZ];
 	unsigned long	count;
 
-	/* IVM_MAC Adress begins at offset 1 */
+	/* IVM_MAC Address begins at offset 1 */
 	sprintf((char *)valbuf, "%pM", buf + 1);
 	ivm_set_value("IVM_MacAddress", (char *)valbuf);
 	/* IVM_MacCount */
@@ -247,9 +246,9 @@
 		return -1;
 
 	ivm_get_value(buf, CONFIG_SYS_IVM_EEPROM_PAGE_LEN,
-			"IVM_BoardId", 0, 1);
+		      "IVM_BoardId", 0, 1);
 	val = ivm_get_value(buf, CONFIG_SYS_IVM_EEPROM_PAGE_LEN,
-			"IVM_HWKey", 6, 1);
+			    "IVM_HWKey", 6, 1);
 	if (val != 0xffff) {
 		sprintf((char *)valbuf, "%x", ((val / 100) % 10));
 		ivm_set_value("IVM_HWVariant", (char *)valbuf);
@@ -257,7 +256,7 @@
 		ivm_set_value("IVM_HWVersion", (char *)valbuf);
 	}
 	ivm_get_value(buf, CONFIG_SYS_IVM_EEPROM_PAGE_LEN,
-		"IVM_Functions", 12, 0);
+		      "IVM_Functions", 12, 0);
 
 	GET_STRING("IVM_Symbol", IVM_POS_SYMBOL_ONLY, 8)
 	GET_STRING("IVM_DeviceName", IVM_POS_SHORT_TEXT, 64)
@@ -269,7 +268,7 @@
 		while (i < len) {
 			if (tmp[i] == ';') {
 				ivm_set_value("IVM_ShortText",
-					(char *)&tmp[i + 1]);
+					      (char *)&tmp[i + 1]);
 				break;
 			}
 			i++;
@@ -292,7 +291,7 @@
 	if (ivm_check_crc(&buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN * 2], 2) != 0)
 		return 0;
 	ivm_analyze_block2(&buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN * 2],
-		CONFIG_SYS_IVM_EEPROM_PAGE_LEN);
+			   CONFIG_SYS_IVM_EEPROM_PAGE_LEN);
 
 	return 0;
 }
@@ -305,22 +304,23 @@
 	/* do we have the page 2 filled ? if not return */
 	if (ivm_check_crc(buf, 2))
 		return 0;
-	page2 = &buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN*2];
+	page2 = &buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN * 2];
 
-#ifndef CONFIG_KMTEGR1
-	/* if an offset is defined, add it */
-	process_mac(valbuf, page2, mac_address_offset, true);
-	env_set((char *)"ethaddr", (char *)valbuf);
-#else
-/* KMTEGR1 has a special setup. eth0 has no connection to the outside and
- * gets an locally administred MAC address, eth1 is the debug interface and
- * gets the official MAC address from the IVM
- */
-	process_mac(valbuf, page2, mac_address_offset, false);
-	env_set((char *)"ethaddr", (char *)valbuf);
-	process_mac(valbuf, page2, mac_address_offset, true);
-	env_set((char *)"eth1addr", (char *)valbuf);
-#endif
+	if (!IS_ENABLED(CONFIG_KMTEGR1)) {
+		/* if an offset is defined, add it */
+		process_mac(valbuf, page2, mac_address_offset, true);
+		env_set((char *)"ethaddr", (char *)valbuf);
+	} else {
+		/* KMTEGR1 has a special setup. eth0 has no connection to the
+		 * outside and gets an locally administred MAC address, eth1 is
+		 * the debug interface and gets the official MAC address from
+		 * the IVM
+		 */
+		process_mac(valbuf, page2, mac_address_offset, false);
+		env_set((char *)"ethaddr", (char *)valbuf);
+		process_mac(valbuf, page2, mac_address_offset, true);
+		env_set((char *)"eth1addr", (char *)valbuf);
+	}
 
 	return 0;
 }
diff --git a/board/keymile/km_arm/fpga_config.c b/board/keymile/km_arm/fpga_config.c
index abb5b7d..839b162 100644
--- a/board/keymile/km_arm/fpga_config.c
+++ b/board/keymile/km_arm/fpga_config.c
@@ -40,14 +40,14 @@
 	ret = i2c_read(BOCO_ADDR, reg, 1, &regval, 1);
 	if (ret) {
 		printf("%s: error reading the BOCO @%#x !!\n",
-			__func__, reg);
+		       __func__, reg);
 		return ret;
 	}
 	regval &= ~flags;
 	ret = i2c_write(BOCO_ADDR, reg, 1, &regval, 1);
 	if (ret) {
 		printf("%s: error writing the BOCO @%#x !!\n",
-			__func__, reg);
+		       __func__, reg);
 		return ret;
 	}
 
@@ -63,14 +63,14 @@
 	ret = i2c_read(BOCO_ADDR, reg, 1, &regval, 1);
 	if (ret) {
 		printf("%s: error reading the BOCO @%#x !!\n",
-			__func__, reg);
+		       __func__, reg);
 		return ret;
 	}
 	regval |= flags;
 	ret = i2c_write(BOCO_ADDR, reg, 1, &regval, 1);
 	if (ret) {
 		printf("%s: error writing the BOCO @%#x !!\n",
-			__func__, reg);
+		       __func__, reg);
 		return ret;
 	}
 
@@ -113,7 +113,8 @@
 	skip = 0;
 #ifndef CONFIG_KM_FPGA_FORCE_CONFIG
 	/* if the FPGA is already configured, we do not want to
-	 * reconfigure it */
+	 * reconfigure it
+	 */
 	skip = 0;
 	if (fpga_done()) {
 		printf("PCIe FPGA config: skipped\n");
@@ -179,7 +180,7 @@
 		ret = i2c_read(BOCO_ADDR, SPI_REG, 1, &spictrl, 1);
 		if (ret) {
 			printf("%s: error reading the BOCO spictrl !!\n",
-				__func__);
+			       __func__);
 			return ret;
 		}
 		if (timeout-- == 0) {
@@ -235,7 +236,8 @@
 #endif
 
 /* the FPGA was configured, we configure the BOCO2 so that the EEPROM
- * is available from the Bobcat SPI bus */
+ * is available from the Bobcat SPI bus
+ */
 int toggle_eeprom_spi_bus(void)
 {
 	int ret = 0;
diff --git a/board/keymile/km_arm/km_arm.c b/board/keymile/km_arm/km_arm.c
index 7d191ab..60187bd 100644
--- a/board/keymile/km_arm/km_arm.c
+++ b/board/keymile/km_arm/km_arm.c
@@ -53,9 +53,9 @@
 #define PHY_MARVELL_88E1118R_LED_CTRL_REG		0x0010
 
 #define PHY_MARVELL_88E1118R_LED_CTRL_RESERVED		0x1000
-#define PHY_MARVELL_88E1118R_LED_CTRL_LED0_1000MB	(0x7<<0)
-#define PHY_MARVELL_88E1118R_LED_CTRL_LED1_ACT		(0x3<<4)
-#define PHY_MARVELL_88E1118R_LED_CTRL_LED2_LINK		(0x0<<8)
+#define PHY_MARVELL_88E1118R_LED_CTRL_LED0_1000MB	(0x7 << 0)
+#define PHY_MARVELL_88E1118R_LED_CTRL_LED1_ACT		(0x3 << 4)
+#define PHY_MARVELL_88E1118R_LED_CTRL_LED2_LINK		(0x0 << 8)
 
 /* I/O pin to erase flash RGPP09 = MPP43 */
 #define KM_FLASH_ERASE_ENABLE	43
@@ -169,6 +169,7 @@
 {
 	uchar buf[32];
 	unsigned int bootcountaddr;
+
 	bootcountaddr = gd->ram_size - BOOTCOUNT_ADDR;
 	sprintf((char *)buf, "0x%x", bootcountaddr);
 	env_set("bootcountaddr", (char *)buf);
@@ -192,7 +193,7 @@
 
 	/* set the 2 bitbang i2c pins as output gpios */
 	tmp = readl(MVEBU_GPIO0_BASE + 4);
-	writel(tmp & (~KM_KIRKWOOD_SOFT_I2C_GPIOS) , MVEBU_GPIO0_BASE + 4);
+	writel(tmp & (~KM_KIRKWOOD_SOFT_I2C_GPIOS), MVEBU_GPIO0_BASE + 4);
 #endif
 	/* adjust SDRAM size for bank 0 */
 	mvebu_sdram_size_adjust(0);
@@ -292,11 +293,11 @@
 
 #define	PHY_LED_SEL_REG		0x18
 #define PHY_LED0_LINK		(0x5)
-#define PHY_LED1_ACT		(0x8<<4)
-#define PHY_LED2_INT		(0xe<<8)
+#define PHY_LED1_ACT		(0x8 << 4)
+#define PHY_LED2_INT		(0xe << 8)
 #define	PHY_SPEC_CTRL_REG	0x1c
-#define PHY_RGMII_CLK_STABLE	(0x1<<10)
-#define PHY_CLSA		(0x1<<1)
+#define PHY_RGMII_CLK_STABLE	(0x1 << 10)
+#define PHY_CLSA		(0x1 << 1)
 
 /* Configure and enable MV88E3018 PHY */
 void reset_phy(void)
@@ -407,8 +408,8 @@
 		return;
 
 	/* check for Marvell 88E1118R Gigabit PHY (PIGGY3) */
-	if ((oui == PHY_MARVELL_OUI) &&
-	    (model == PHY_MARVELL_88E1118R_MODEL)) {
+	if (oui == PHY_MARVELL_OUI &&
+	    model == PHY_MARVELL_88E1118R_MODEL) {
 		/* set page register to 3 */
 		if (miiphy_write(name, CONFIG_PHY_BASE_ADR,
 				 PHY_MARVELL_PAGE_REG,
@@ -438,7 +439,6 @@
 }
 #endif
 
-
 #if defined(CONFIG_HUSH_INIT_VAR)
 int hush_init_var(void)
 {
@@ -478,22 +478,23 @@
 
 int post_hotkeys_pressed(void)
 {
-#if defined(CONFIG_KM_COGE5UN)
-	return kw_gpio_get_value(KM_POST_EN_L);
-#else
-	return !kw_gpio_get_value(KM_POST_EN_L);
-#endif
+	if (IS_ENABLED(CONFIG_KM_COGE5UN))
+		return kw_gpio_get_value(KM_POST_EN_L);
+	else
+		return !kw_gpio_get_value(KM_POST_EN_L);
 }
 
 ulong post_word_load(void)
 {
-	void* addr = (void *) (gd->ram_size - BOOTCOUNT_ADDR + POST_WORD_OFF);
+	void *addr = (void *)(gd->ram_size - BOOTCOUNT_ADDR + POST_WORD_OFF);
+
 	return in_le32(addr);
 
 }
 void post_word_store(ulong value)
 {
-	void* addr = (void *) (gd->ram_size - BOOTCOUNT_ADDR + POST_WORD_OFF);
+	void *addr = (void *)(gd->ram_size - BOOTCOUNT_ADDR + POST_WORD_OFF);
+
 	out_le32(addr, value);
 }
 
@@ -502,14 +503,14 @@
 	*vstart = CONFIG_SYS_SDRAM_BASE;
 
 	/* we go up to relocation plus a 1 MB margin */
-	*size = CONFIG_SYS_TEXT_BASE - (1<<20);
+	*size = CONFIG_SYS_TEXT_BASE - (1 << 20);
 
 	return 0;
 }
 #endif
 
 #if defined(CONFIG_SYS_EEPROM_WREN)
-int eeprom_write_enable(unsigned dev_addr, int state)
+int eeprom_write_enable(unsigned int dev_addr, int state)
 {
 	kw_gpio_set_value(KM_KIRKWOOD_ENV_WP, !state);
 
