diff --git a/Cargo.lock b/Cargo.lock
index 1a26061..7e993e6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -513,12 +513,6 @@ dependencies = [
  "unicode-width 0.2.0",
 ]
 
-[[package]]
-name = "parse-size"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "487f2ccd1e17ce8c1bfab3a65c89525af41cfad4c8659021a1e9a2aacd73b89b"
-
 [[package]]
 name = "parse_datetime"
 version = "0.7.0"
@@ -1119,7 +1113,6 @@ name = "uu_lscpu"
 version = "0.0.1"
 dependencies = [
  "clap",
- "parse-size",
  "regex",
  "serde",
  "serde_json",
diff --git a/Cargo.toml b/Cargo.toml
index 9222a85..f2864ca 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -46,7 +46,6 @@ dns-lookup = "2.0.4"
 libc = "0.2.152"
 linux-raw-sys = { version = "0.7.0", features = ["ioctl"] }
 nix = { version = "0.29", default-features = false }
-parse-size = "1.1.0"
 phf = "0.11.2"
 phf_codegen = "0.11.2"
 rand = { version = "0.9.0", features = ["small_rng"] }
diff --git a/src/uu/lscpu/Cargo.toml b/src/uu/lscpu/Cargo.toml
index bb8c86a..8d45f12 100644
--- a/src/uu/lscpu/Cargo.toml
+++ b/src/uu/lscpu/Cargo.toml
@@ -17,4 +17,3 @@ uucore = { workspace = true }
 clap = { workspace = true }
 serde = { workspace = true }
 serde_json = { workspace = true }
-parse-size = { workspace = true }
diff --git a/src/uu/lscpu/src/sysfs.rs b/src/uu/lscpu/src/sysfs.rs
index 787e0b7..2497f23 100644
--- a/src/uu/lscpu/src/sysfs.rs
+++ b/src/uu/lscpu/src/sysfs.rs
@@ -1,4 +1,3 @@
-use parse_size::parse_size;
 use std::{collections::HashSet, fs, path::PathBuf};
 
 pub struct CpuVulnerability {
@@ -113,7 +112,7 @@ fn read_cpu_caches(cpu_index: usize) -> Vec<CpuCache> {
             .unwrap();
 
         let size_string = fs::read_to_string(cache_path.join("size")).unwrap();
-        let c_size = parse_size(size_string.trim()).unwrap();
+        let c_size = parse_cache_size(size_string.trim());
 
         let shared_cpu_map = fs::read_to_string(cache_path.join("shared_cpu_map"))
             .unwrap()
@@ -202,6 +201,42 @@ fn parse_cpu_list(list: &str) -> Vec<usize> {
     out
 }
 
+fn parse_cache_size(s: &str) -> u64 {
+    // Yes, this will break if we ever reach a point where caches exceed terabytes in size...
+    const EXPONENTS: [(char, u32); 4] = [('K', 1), ('M', 2), ('G', 3), ('T', 4)];
+
+    // If we only have numbers, treat it as a raw amount of bytes and parse as-is
+    if s.chars().all(|c| c.is_numeric()) {
+        return s.parse::<u64>().expect("Could not parse cache size");
+    };
+
+    for (suffix, exponent) in EXPONENTS {
+        if s.ends_with(suffix) {
+            let nums = s.strip_suffix(suffix).unwrap();
+            let value = nums.parse::<u64>().expect("Could not parse cache size");
+            let multiplier = 1024_u64.pow(exponent);
+
+            return value * multiplier;
+        }
+    }
+
+    panic!("No known suffix in cache size string");
+}
+
+#[test]
+fn test_parse_cache_size() {
+    assert_eq!(parse_cache_size("512"), 512);
+
+    assert_eq!(parse_cache_size("1K"), 1024);
+    assert_eq!(parse_cache_size("1M"), 1024 * 1024);
+    assert_eq!(parse_cache_size("1G"), 1024 * 1024 * 1024);
+    assert_eq!(parse_cache_size("1T"), 1024 * 1024 * 1024 * 1024);
+
+    assert_eq!(parse_cache_size("123K"), 123 * 1024);
+    assert_eq!(parse_cache_size("32M"), 32 * 1024 * 1024);
+    assert_eq!(parse_cache_size("345G"), 345 * 1024 * 1024 * 1024);
+}
+
 #[test]
 fn test_parse_cpu_list() {
     assert_eq!(parse_cpu_list(""), Vec::<usize>::new());