diff --git a/core/linux-sun4i/0001-block-partition-msdos-provide-UUIDs-for-partitions.patch b/core/linux-sun4i/0001-block-partition-msdos-provide-UUIDs-for-partitions.patch
new file mode 100644
index 000000000..47ea8a984
--- /dev/null
+++ b/core/linux-sun4i/0001-block-partition-msdos-provide-UUIDs-for-partitions.patch
@@ -0,0 +1,114 @@
+From d33b98fc82b0908e91fb05ae081acaed7323f9d2 Mon Sep 17 00:00:00 2001
+From: Stephen Warren <swarren@nvidia.com>
+Date: Thu, 8 Nov 2012 16:12:28 -0800
+Subject: [PATCH] block: partition: msdos: provide UUIDs for partitions
+
+The MSDOS/MBR partition table includes a 32-bit unique ID, often referred
+to as the NT disk signature.  When combined with a partition number within
+the table, this can form a unique ID similar in concept to EFI/GPT's
+partition UUID.  Constructing and recording this value in struct
+partition_meta_info allows MSDOS partitions to be referred to on the
+kernel command-line using the following syntax:
+
+root=PARTUUID=0002dd75-01
+
+Signed-off-by: Stephen Warren <swarren@nvidia.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Will Drewry <wad@chromium.org>
+Cc: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ block/partitions/msdos.c | 21 +++++++++++++++++++--
+ init/do_mounts.c         |  4 ++++
+ 2 files changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c
+index 5f79a66..8752a5d 100644
+--- a/block/partitions/msdos.c
++++ b/block/partitions/msdos.c
+@@ -94,6 +94,17 @@ static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
+ 	return ret;
+ }
+ 
++static void set_info(struct parsed_partitions *state, int slot,
++		     u32 disksig)
++{
++	struct partition_meta_info *info = &state->parts[slot].info;
++
++	snprintf(info->uuid, sizeof(info->uuid), "%08x-%02x", disksig,
++		 slot);
++	info->volname[0] = 0;
++	state->parts[slot].has_info = true;
++}
++
+ /*
+  * Create devices for each logical partition in an extended partition.
+  * The logical partitions form a linked list, with each entry being
+@@ -106,7 +117,8 @@ static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
+  */
+ 
+ static void parse_extended(struct parsed_partitions *state,
+-			   sector_t first_sector, sector_t first_size)
++			   sector_t first_sector, sector_t first_size,
++			   u32 disksig)
+ {
+ 	struct partition *p;
+ 	Sector sect;
+@@ -166,6 +178,7 @@ static void parse_extended(struct parsed_partitions *state,
+ 			}
+ 
+ 			put_partition(state, state->next, next, size);
++			set_info(state, state->next, disksig);
+ 			if (SYS_IND(p) == LINUX_RAID_PARTITION)
+ 				state->parts[state->next].flags = ADDPART_FLAG_RAID;
+ 			loopct = 0;
+@@ -437,6 +450,7 @@ int msdos_partition(struct parsed_partitions *state)
+ 	struct partition *p;
+ 	struct fat_boot_sector *fb;
+ 	int slot;
++	u32 disksig;
+ 
+ 	data = read_part_sector(state, 0, &sect);
+ 	if (!data)
+@@ -491,6 +505,8 @@ int msdos_partition(struct parsed_partitions *state)
+ #endif
+ 	p = (struct partition *) (data + 0x1be);
+ 
++	disksig = le32_to_cpup((__le32 *)(data + 0x1b8));
++
+ 	/*
+ 	 * Look for partitions in two passes:
+ 	 * First find the primary and DOS-type extended partitions.
+@@ -515,11 +531,12 @@ int msdos_partition(struct parsed_partitions *state)
+ 			put_partition(state, slot, start, n);
+ 
+ 			strlcat(state->pp_buf, " <", PAGE_SIZE);
+-			parse_extended(state, start, size);
++			parse_extended(state, start, size, disksig);
+ 			strlcat(state->pp_buf, " >", PAGE_SIZE);
+ 			continue;
+ 		}
+ 		put_partition(state, slot, start, size);
++		set_info(state, slot, disksig);
+ 		if (SYS_IND(p) == LINUX_RAID_PARTITION)
+ 			state->parts[slot].flags = ADDPART_FLAG_RAID;
+ 		if (SYS_IND(p) == DM6_PARTITION)
+diff --git a/init/do_mounts.c b/init/do_mounts.c
+index c950d7c..1d1b634 100644
+--- a/init/do_mounts.c
++++ b/init/do_mounts.c
+@@ -189,6 +189,10 @@ done:
+  *	   used when disk name of partitioned disk ends on a digit.
+  *	6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
+  *	   unique id of a partition if the partition table provides it.
++ *	   The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
++ *	   partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
++ *	   filled hex representation of the 32-bit "NT disk signature", and PP
++ *	   is a zero-filled hex representation of the 1-based partition number.
+  *	7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
+  *	   a partition with a known unique id.
+  *
+-- 
+2.1.3
+
diff --git a/core/linux-sun4i/PKGBUILD b/core/linux-sun4i/PKGBUILD
index 1cfe5cf26..526d4ba54 100644
--- a/core/linux-sun4i/PKGBUILD
+++ b/core/linux-sun4i/PKGBUILD
@@ -9,7 +9,7 @@ _srcname=linux-sunxi-${_commit}
 _kernelname=${pkgname#linux}
 _desc="AllWinner A10"
 pkgver=3.4.103
-pkgrel=1
+pkgrel=2
 arch=('armv7h')
 url="http://www.kernel.org/"
 license=('GPL2')
@@ -18,10 +18,12 @@ options=('!strip')
 source=("https://github.com/linux-sunxi/linux-sunxi/archive/${_commit}.tar.gz"
         '0001-Backport-BFP-XOR-operation.patch'
         '0001-Backport-firmware-loader.patch'
+        '0001-block-partition-msdos-provide-UUIDs-for-partitions.patch'
         'config')
 md5sums=('6cdd44f9131a854cdbf5ddad86187c57'
          'ca5b466850782493b99e824d6efbea4d'
          '520bde63dd6803f3332e9b26cb34cff9'
+         '8d1f84619971cf0f2b76d86bec253ac8'
          '4592842f7b5702452815d5601f43ab7a')
 
 prepare() {
@@ -31,6 +33,7 @@ prepare() {
 
   git apply ../0001-Backport-BFP-XOR-operation.patch
   git apply ../0001-Backport-firmware-loader.patch
+  git apply ../0001-block-partition-msdos-provide-UUIDs-for-partitions.patch
 
   # add pkgrel to extraversion
   sed -ri "s|^(EXTRAVERSION =)(.*)|\1 \2-${pkgrel}|" Makefile