diff --git a/src/main/scala/uncore/tilelink2/Parameters.scala b/src/main/scala/uncore/tilelink2/Parameters.scala index 7c49e792..61bdad72 100644 --- a/src/main/scala/uncore/tilelink2/Parameters.scala +++ b/src/main/scala/uncore/tilelink2/Parameters.scala @@ -127,7 +127,8 @@ case class TLManagerParameters( supportsPutPartial: TransferSizes = TransferSizes.none, supportsHint: TransferSizes = TransferSizes.none, // If fifoId=Some, all accesses sent to the same fifoId are executed and ACK'd in FIFO order - fifoId: Option[Int] = None) + fifoId: Option[Int] = None, + customDTS: Option[String]= None) { address.combinations(2).foreach({ case Seq(x,y) => require (!x.overlaps(y)) @@ -143,6 +144,18 @@ case class TLManagerParameters( supportsPutFull.max, supportsPutPartial.max).max + // Generate the config string (in future device tree) + lazy val name = nodePath.lastOption.map(_.lazyModule.name).getOrElse("disconnected") + lazy val dts = customDTS.getOrElse { + val header = s"${name} {\n" + val middle = address.map { a => + require (!a.strided) // Config String does not support this + " addr 0x%x;\n size 0x%x;\n".format(a.base, a.mask+1) + } + val footer = "}\n" + header + middle.reduce(_ + _) + footer + } + // The device had better not support a transfer larger than it's alignment address.foreach({ case a => require (a.alignment1 >= maxTransfer-1)