[sherlock][spi] Use interrupts and 64-bit transfers for Thread

64-bit transfers are required for getting Thread working at the new
SPI clock frequency.

Test: ot driver tests pass
Change-Id: I34cab22642508e245ab528380fb1d779563d6221
diff --git a/src/devices/board/drivers/sherlock/sherlock-registers.cc b/src/devices/board/drivers/sherlock/sherlock-registers.cc
index 0de7590..e562467 100644
--- a/src/devices/board/drivers/sherlock/sherlock-registers.cc
+++ b/src/devices/board/drivers/sherlock/sherlock-registers.cc
@@ -111,6 +111,16 @@
                                    },
                                });
 
+  register_entries[aml_registers::REGISTER_SPICC0_RESET] =
+      registers::BuildMetadata(allocator, aml_registers::REGISTER_SPICC0_RESET, RESET_MMIO,
+                               std::vector<registers::MaskEntryBuilder<uint32_t>>{
+                                   {
+                                       .mask = aml_registers::SPICC0_RESET_MASK,
+                                       .mmio_offset = T931_RESET6_REGISTER,
+                                       .reg_count = 1,
+                                   },
+                               });
+
 #ifdef FACTORY_BUILD
   mmio_entries[USB_FACTORY_MMIO] = registers::BuildMetadata(allocator, USB_FACTORY_MMIO);
 
diff --git a/src/devices/board/drivers/sherlock/sherlock-spi.cc b/src/devices/board/drivers/sherlock/sherlock-spi.cc
index a551796..69e9ac2 100644
--- a/src/devices/board/drivers/sherlock/sherlock-spi.cc
+++ b/src/devices/board/drivers/sherlock/sherlock-spi.cc
@@ -32,6 +32,13 @@
     },
 };
 
+static const pbus_irq_t spi_irqs[] = {
+    {
+        .irq = T931_SPICC0_IRQ,
+        .mode = ZX_INTERRUPT_MODE_EDGE_HIGH,
+    },
+};
+
 static const spi_channel_t spi_channels[] = {
     // Thread SPI
     {
@@ -61,6 +68,8 @@
   dev.did = PDEV_DID_AMLOGIC_SPI;
   dev.mmio_list = spi_mmios;
   dev.mmio_count = countof(spi_mmios);
+  dev.irq_list = spi_irqs;
+  dev.irq_count = countof(spi_irqs);
   return dev;
 }();
 
@@ -74,8 +83,17 @@
     {std::size(gpio_spicc0_ss0_match), gpio_spicc0_ss0_match},
 };
 
+static const zx_bind_inst_t spi0_reset_register_match[] = {
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_REGISTERS),
+    BI_MATCH_IF(EQ, BIND_REGISTER_ID, aml_registers::REGISTER_SPICC0_RESET),
+};
+static const device_fragment_part_t spi0_reset_register_fragment[] = {
+    {std::size(spi0_reset_register_match), spi0_reset_register_match},
+};
+
 static constexpr device_fragment_t fragments[] = {
     {"gpio-cs-0", std::size(gpio_spicc0_ss0_fragment), gpio_spicc0_ss0_fragment},
+    {"reset", std::size(spi0_reset_register_fragment), spi0_reset_register_fragment},
 };
 
 zx_status_t Sherlock::SpiInit() {